这一直是一个常见问题,所以我很惊讶谷歌没有提出更多答案。我正在开发一个有几种不同实体的rails应用程序,这些实体需要与不同实体的关系。例如:
Address
:存储街道地址详情的模型(这是我的共享实体)PersonContact
:包含家庭电话,手机和电子邮件地址等内容的模型。此模型需要具有与之关联的地址DogContact
:显然,如果你想联系一只狗,你必须去它所居住的地方。因此,PersonContact
和DogContact
应具有Address
的外键。即使它们确实是Address
的“拥有”对象。这样就可以了,除了accepts_nested_attributes_for
指望Address
中的外键正常工作。
将外键保留在Address
中,但PersonContact
和DogContact
成为拥有对象的正确策略是什么?
答案 0 :(得分:0)
我相信你应该使用polymorphic association。
为此,您需要在addressable_id
表格中添加addressable_type
和addresses
。你的模型看起来应该是这样的:
class Address < ActiveRecord::Base
belongs_to :addressable, :polymorphic => true
end
class PersonContact < ActiveRecord::Base
has_one :address, :as => :addressable
end
class DogContact < ActiveRecord::Base
has_one :address, :as => :addressable
end