2011-06-13 29 views
2

我有以下型號:幫助,在軌accepts_nested_attributes_for 3

class Address < ActiveRecord::Base 
    validates_presence_of :street, postal_code 
end 

class Person < ActiveRecord::Base 
    belongs_to :address 
    belongs_to :work_address, :class_name => 'Address' 

    accepts_nested_attributes_for :address, :work_address 

    def initialize(params={}) 
    params[:address] = Address.new 
    params[:work_address] = Address.new 
    super 
    end 
end 

當試圖創建人:

person = { 
    "address_attributes" => {:street => "foo", :postal_code => "45632-963"} 
    "work_address_attributes" => {:street => "bar", :postal_code => "45632-964"} 
} 
Person.create(person) 

我得到的地址域的人物體填滿,但work_adress領域是空白的。然而,它的工作原理,當我嘗試:

p.work_address_attributes = {:street => "bar", :postal_code => "45632-964"} 

在我看來,我有以下代碼:

<%= form_for(@person) do |form| %> 
... 
<%= form.fields_for :address do |address| %> 
    <%= address.text_field :street %> 
    <%= address.text_field :postal_code %> 
<% end %> 

<%= form.fields_for :work_address do |work_address| %> 
    <%= work_address.text_field :street %> 
    <%= work_address.text_field :postal_code %> 
<% end %> 

<%= form.submit %> 
<% end %> 

什麼是錯的?

回答

0

您是否嘗試過在初始化函數中註釋掉將params[:work_address]設置爲新的Address對象的行?如果您使用嵌套屬性,則不需要設置它。如果你真的需要這兩條線,我會改變他們是這樣的:

params[:work_address] = Address.new if params[:work_address_attributes].nil? 

accepts_nested_attributes_for應該處理邏輯你。也許你的地址對象覆蓋你在散列中傳遞的內容?

+0

不,我的地址對象沒有覆蓋任何東西。我建議解決方案正常工作。我已經測試並得出結論,我根本不需要構造函數中的這段代碼。但是當我刪除它時,'form.fields_for:address'視圖代碼不會呈現任何東西。任何解決方案? – 2011-06-13 18:19:42

+0

您可以在編輯中將您的視圖代碼添加到您的問題中嗎? – 2011-06-13 18:27:55