我有一个模型Entree属于模型Vin,它本身属于模型Producteur。
在Entree创建/编辑的表单上,我想允许用户定义父Vin和Producteur的属性来创建它们,或者如果它们存在则检索它们(根据用户输入进行检索)。
现在,我在Entree new
和edit
操作中执行以下操作:
@entree = Entree.new
@entree.vin = Vin.new
@entree.vin.producteur = Producteur.new
并在表单中使用fields_for
帮助程序,这是有效的。但是我打算在更多的模型中有更多的依赖关系,所以我想保持干燥。我在Vin模型中定义了一个after_initialize
回调,用于执行产品初始化:
class Vin < ActiveRecord::Base
after_initialize :vin_setup
def vin_setup
producteur = Producteur.new
end
end
并从控制器中删除producteur.new
。但是,在新操作上出错:
NilClass的未定义方法`model_name':Class
表示
形式的行<%= fields_for @entree.vin.producteur do |producteur| %>
我想这意味着after_initialize回调不会像我预期的那样动作。有什么我想念的吗?另外,如果我在Vin模型中定义after_initialize
方法而不是定义回调,我会得到同样的错误。
答案 0 :(得分:1)
您可能需要
def vin_setup
self.producteur = Producteur.new
end
你拥有它的方式,你正在初始化一个名为producteur的局部变量。
答案 1 :(得分:0)
您无法为after_initialize
事件注册回调方法。您必须实现一个名为after_initialize
的方法。
试试这个:
class Vin < ActiveRecord::Base
def after_initialize
self.producteur = Producteur.new if new_record?
end
end