Rails4:嵌套表格

Rails 4: nested forms

我有两个模型:

class Incident < ActiveRecord::Base
    belongs_to :person
    accepts_nested_attributes_for :person
end

class Person < ActiveRecord::Base
    has_many :incidents
    validates :name, presence: true
end

我希望用户能够在同一事件的表单中创建或不创建此人。

我的事件控制者:

def new
    @incident = Incident.new
    @incident.build_person
end

def create
    @incident = Incident.new(incident_params)

    if @incident.save
        redirect_to event_path(params[:incident]["event_id"].to_i)
    else
        redirect_to events_path
    end
end

private

def incident_params

    params.require(:incident).permit(:incident_type_id, :event_id, :user_id, 
        :description, :supporter_id, :person_id, :supporter_group_id, 
        person_attributes: [:id, :name, :surname, :second_surname,    :identity_document])
end

当我保存一个人的事件时,此代码有效。但是当我想保存一个没有人的事件时,因为不需要,这段代码会失败,因为它等待一个人(name can't be blank)。没有人我怎么能挽救事故?

尝试使用

accepts_nested_attributes_for :person, reject_if: :all_blank

这意味着...

如果您没有在事件新页面上输入所有人物属性,人物模型将不会执行验证,只会创建事件记录。 如果您输入任何人员属性,人员模型执行验证并创建事件和人员记录。