0

我有以下两种型号

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

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

4

2 回答 2

1

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

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

类联系人 < ActiveRecord::Base
 has_many :contact_fields
结尾

类 ContactField < ActiveRecord::Base
 属于_to :contact
结尾

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

于 2009-12-15T12:08:17.537 回答
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

于 2009-12-15T12:10:19.967 回答