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

时间:2012-12-06 15:43:20

标签: ruby-on-rails-3 override nested-attributes

由于某种原因太久无法解释我需要覆盖我的模型的*_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)方法以实现我的目标:在创建新体验时创建新公司,并在编辑体验时编辑公司属性。

由于

0 个答案:

没有答案