我在may Rails 3.0.3应用程序中面对这个问题,我认为这是一个愚蠢的错误,但我无法弄清楚为什么会发生这种情况,或者事实上,我误解了ActiveRecord行为并且它实际上不是错误。
这是一个场景,我有三个模型:
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"=>"homer@simpson.com"
})
我面对错误
Couldn't find AddressBase with ID=10 for Address with ID=
之所以发生这种情况是因为AddressBase已经存在并且Address没有,如果我删除了hash的AddressBase.id参数一切正常,但我不想要它,因为这样,总会创建一个新的寄存器for Address和AddressBase。我的目的是重用commons AddressBase,因此需要使用现有AddressBase的新地址的场景。
现在这是我的疑惑,我在AddressBase哈希中缺少一些参数?有什么话说记录已经存在?或者这是ActiveRecord的belongs_to和has_many关联的问题?
提前致谢。
答案 0 :(得分:1)
问题是你无法在rails模型中大量分配ID属性(将ID提供给初始化模型的数据哈希)。
我很难重现你的情况,但如果你知道模型存在,那么提供address_base的id更容易,而不是所有数据的散列。
例如:
User.new({"addresses_attributes"=>
{"0"=>
{"number"=>"10",
"complement"=>"Next Starbucks",
"address_base_id" => 10}
},
"name"=>"Homer Simpson",
"password_confirmation"=>"[FILTERED]",
"document"=>"123321111",
"password"=>"[FILTERED]",
"email"=>"homer@simpson.com"
})