我在這個問題可能在Rails 3.0.3應用程序,我認爲這是一個愚蠢的錯誤,但我無法弄清楚它爲什麼發生,或者事實上,誤解了ActiveRecord的行爲,這不是一個真正的錯誤。「找不到」錯誤ActiveRecord.new方法
這是該方案,我有三種模式:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :addresses, :as => :addressable
accepts_nested_attributes_for :addresses
end
class Address < ActiveRecord::Base
belongs_to :addressable, :polymorphic => true
belongs_to :address_base
accepts_nested_attributes_for :address_base
end
class AddressBase < ActiveRecord::Base
has_many :address
end
如果我嘗試實例化一個新的用戶傳遞一個哈希參數,通過這種方式:
User.new({"addresses_attributes"=>
{"0"=>
{"number"=>"10",
"complement"=>"Next Starbucks",
"address_base_attributes"=>
{"city"=>"San Francisco",
"zip_code"=>"00010",
"district"=>"San Francisco",
"id"=>"10",
"street"=>"Market St.",
"state"=>"CA"}
}
},
"name"=>"Homer Simpson",
"password_confirmation"=>"[FILTERED]",
"document"=>"123321111",
"password"=>"[FILTERED]",
"email"=>"[email protected]"
})
我面對錯誤
Couldn't find AddressBase with ID=10 for Address with ID=
而這種情況發生的原因是AddressBase已經存在,並且地址沒有,如果我刪除了AddressB hash的ase.id參數一切正常,但我不想要它,因爲在這種方式下,總是會爲Address和AddressBase創建一個新的寄存器。我的意圖是重用commons AddressBase's,所以需要一個帶有現有AddressBase的新地址的場景。
現在,這是我的疑惑,我在AddressBase哈希中缺少一些參數?有人說這個記錄已經存在?或者它與ActiveRecord的belongs_to和has_many關聯有問題?
在此先感謝。
感謝@丹尼 - hiemstra!你提出的是我無法真正看到的。我現在只需要考慮如何構建視圖來完成這種情況,因爲這個問題有一些場景,一個是AddressBase已經存在,所以我將只傳遞hash中的address_base_id,第二個場景是當AddressBase don不存在,所以他需要被創建,我需要將所有他的值傳遞給哈希,我會試着找出如何做到這一點。非常感謝你。 – avaz 2011-02-22 19:51:41