我正在尝试构建一个允许用户更新一些记录的表单。但是,它们无法更新每个字段,因此我将进行一些显式处理(目前在控制器中)以更新模型相对于表单。这是我正在尝试的方法:
家庭型号:
class Family < ActiveRecord::Base
has_many :people, dependent: :destroy
accepts_nested_attributes_for :people, allow_destroy: true, reject_if: ->(p){p[:name].blank?}
end
在控制器中
def check
edited_family = Family.new(params[:family])
#compare to the one we have in the db
#update each person as needed/allowed
#save it
end
形式:
= form_for current_family, url: check_rsvp_path, method: :post do |f|
= f.fields_for :people do |person_fields|
- if person_fields.object.user_editable
= person_fields.text_field :name, class: "person-label"
- else
%p.person-label= person_fields.object.name
我想,问题是Family.new(params[:family])
试图将人们从数据库中拉出来,我得到了这个:
ActiveRecord::RecordNotFound in RsvpsController#check
Couldn't find Person with ID=7 for Family with ID=
那是,我猜,因为我没有在嵌套表单中添加家庭 id 字段,我想我可以这样做,但我实际上并不需要它从数据库中加载任何内容,所以我会而不是。我也可以通过自己挖掘参数哈希来获取我需要的数据来解决这个问题,但这并不容易。从 params 哈希中创建一个对象然后使用它似乎最好。
有没有更好的办法?我怎样才能创建嵌套对象?