为什么`assign_attributes`会使params中不包含的嵌套字段无效?

时间:2016-01-20 10:36:12

标签: ruby-on-rails activerecord

标题说:当使用assign_attributes作为嵌套模型时,它似乎使嵌套模型的先前设置字段无效,即使它们未包含在指定的参数中。

class Person < ActiveRecord::Base
  has_one :employee
end

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

e = Employee.new
e.build_person
e.person.kind = :employee

e.assign_attributes(person_attributes: { name: 'John Doe' })

e.person.attributes
# {"id"=>nil, "kind"=>nil, "name"=>"John Doe"}

出于结构原因,build_person并指定kind应该在assign_attributes来电之前进行,因此之后只需设置它就不是一种选择。

这是一个错误吗?有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

诀窍是使用

e.assign_attributes { ... }, update_only: true