用嵌套模型覆盖* _attributes =方法rails

Ren*_*nan 5 overriding nested-attributes ruby-on-rails-3

由于无法解释的原因太长,我需要重写*_attributes=(attributes)模型的方法,该方法接受另一个模型的嵌套属性。例如,这是我的模型:

class Experience < ActiveRecord::Base
    accepts_nested_attributes_for :company

    def company_attributes=(attributes)
        ...
    end
end
Run Code Online (Sandbox Code Playgroud)

首先,每次调用此方法时,我就开始创建一家新公司(用替换...self.company = Company.new(attributes))。不用说它将去并将新公司保存到数据库中。

当我发现它正在做这种事情时,我将该方法编辑为以下内容:

def company_attributes=(attributes)
    self.company.nil? ? self.company = Company.new : self.company.assign_attributes(attributes)
end
Run Code Online (Sandbox Code Playgroud)

这似乎是正确的方法(它只有在没有nil的情况下才会创建一个新对象,否则只会分配已更改的属性)。但是,对于新体验,它将新创建的公司保存到数据库中,而在编辑体验时,它将在方法的单行之后更改公司的属性,但不会将其保存到数据库中。

问题1:生成的*_attributes=(attributes)方法如何工作?

问题2:如何更改company_attributes=(attributes)方法才能实现目标:创建新体验时创建新公司,并在编辑体验时编辑公司属性。

谢谢