我在这个问题可能在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