我在可能的 Rails 3.0.3 App 中遇到了这个问题,我认为这是一个愚蠢的错误,但我无法弄清楚它为什么会发生,或者事实上,我误解了 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"
})
我面临错误
对于 ID= 的地址,找不到 ID=10 的 AddressBase
发生这种情况是因为 AddressBase 已经存在而 Address 不存在,如果我删除哈希的 AddressBase.id 参数一切正常,但我不想要它,因为这样,总是会为 Address 和地址库。我的意图是重用公共地址库,因此需要使用现有地址库的新地址的场景。
现在这是我的疑问,我在 AddressBase 哈希中缺少一些参数??比如说记录已经存在?还是ActiveRecord的belongs_to和has_many关联有问题?
提前致谢。