由于某种原因太长无法解释,我需要覆盖*_attributes=(attributes)
我的模型的方法,该方法接受另一个模型的嵌套属性。例如,这是我的模型:
class Experience < ActiveRecord::Base
accepts_nested_attributes_for :company
def company_attributes=(attributes)
...
end
end
首先,每次调用此方法时,我都开始创建一家新公司(通过替换...
为self.company = Company.new(attributes)
)。不用说它会将新公司保存到数据库中。
当我发现它正在做这样的事情时,我将此方法编辑为以下内容:
def company_attributes=(attributes)
self.company.nil? ? self.company = Company.new : self.company.assign_attributes(attributes)
end
这似乎是正确的方法(如果它是 nil,它只会创建一个新对象,否则它只会分配更改的属性)。但是,对于新体验,它将新创建的公司保存到数据库中,而在编辑体验时,它会在方法的单行之后更改公司的属性,但不会将其保存到数据库中。
问题1:生成的*_attributes=(attributes)
方法如何工作?
问题2:我应该如何改变我的company_attributes=(attributes)
方法以实现我的目标:创建新体验时创建新公司,编辑体验时编辑公司属性。
谢谢