2012-03-28 85 views
2

我有一個模型主菜屬於模型Vin,它本身屬於模型Producteur。在創建模型時初始化子模型

在Entree創建/編輯的表單上,我希望允許用戶定義父Vin和Producteur的屬性以創建它們,或者如果它們存在(基於用戶輸入進行檢索),可以檢索它們。

現在我做主菜new以下和edit操作:

@entree = Entree.new 
@entree.vin = Vin.new  
@entree.vin.producteur = Producteur.new 

和使用形式fields_for幫手,而工作。但是我打算對更多模型有更多的依賴關係,所以我想讓它保持乾燥。我所定義的回調after_initialize在Vin的模型它執行初始化producteur:

class Vin < ActiveRecord::Base 
    after_initialize :vin_setup 

    def vin_setup 
    producteur = Producteur.new 
    end 
end 

和從控制器移除producteur.new。然而,獲得新動作的錯誤:

未定義的方法`MODEL_NAME」的NilClass:類

的形式,說

<%= fields_for @entree.vin.producteur do |producteur| %> 

行我想這意味着after_initialize回調不會像我期望的那樣工作。有什麼我失蹤?另外,如果我在Vin模型中定義after_initialize方法而不是定義回調,則會出現相同的錯誤。

回答

1

你可能需要

def vin_setup 
    self.producteur = Producteur.new 
end 

你有它的方式,要初始化一個名爲producteur的局部變量。

+0

感謝,這就行了。我認爲既然producteur是一個明確的關聯,它就會認識到它。 – Antoine 2012-03-28 17:36:26

0

您無法註冊after_initialize事件的回叫方法。您必須實施一種名爲after_initialize的方法。

試試這個:

class Vin < ActiveRecord::Base 
    def after_initialize 
    self.producteur = Producteur.new if new_record? 
    end 
end