Rails嵌套属性,共享或公共对象的关系

时间:2010-06-14 05:57:52

标签: ruby-on-rails foreign-key-relationship nested-attributes

这一直是一个常见问题,所以我很惊讶谷歌没有提出更多答案。我正在开发一个有几种不同实体的rails应用程序,这些实体需要与不同实体的关系。例如:

  1. Address:存储街道地址详情的模型(这是我的共享实体)
  2. PersonContact:包含家庭电话,手机和电子邮件地址等内容的模型。此模型需要具有与之关联的地址
  3. DogContact:显然,如果你想联系一只狗,你必须去它所居住的地方。
  4. 因此,PersonContactDogContact应具有Address的外键。即使它们确实是Address的“拥有”对象。这样就可以了,除了accepts_nested_attributes_for指望Address中的外键正常工作。

    将外键保留在Address中,但PersonContactDogContact成为拥有对象的正确策略是什么?

1 个答案:

答案 0 :(得分:0)

我相信你应该使用polymorphic association

为此,您需要在addressable_id表格中添加addressable_typeaddresses。你的模型看起来应该是这样的:

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