两个单表继承模型之间的关系

时间:2009-12-15 12:00:40

标签: ruby-on-rails has-many single-table-inheritance belongs-to

我有以下两个模型

class ContactField < ActiveRecord::Base
end

class Address < ContactField
end

class Phone < ContactField
end

class Contact < ActiveRecord::Base
end

class Company < Contact
end

class Person < Contact
end

我想要一个联系人,无论是公司还是个人,都有很多ContactFields(地址和电话)......那么我应该把那些有很多属于< / STRONG>? 感谢

2 个答案:

答案 0 :(得分:1)

你已经用简单的英语说了:-)

  

我想要一个联系人,无论是公司还是个人,都有很多ContactFields(地址和电话)......那么我应该把它放在哪里有很多属于?感谢


class Contact < ActiveRecord::Base
 has_many :contact_fields
end

class ContactField < ActiveRecord::Base
 belongs_to :contact
end

此关系将由地址和电话继承

答案 1 :(得分:1)

看起来你在描述属于某种关系。关联应该在父类中定义,因此它们可以由子类继承。

class ContactField < ActiveRecord::Base
  belongs_to :contact
  belongs_to :company, :foreign_key => :contact_id
  belongs_to :person, :foreign_key => :contact_id
end

class Contact < ActiveRecord::Base
  has_many :contact_fields
  has_many :addresses
  has_many :phones
end

然而,@ contact.contact_fields将只返回ContactField记录。如果需要任何子类中定义的方法,则始终可以使用become方法。有几种方法可以解决这个问题。这样就增加了额外的关联,就像我一样。或使用ActiveRecord::Base#becomes