0

私は次の2つのモデルを持っています

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

会社であろうと個人であろうと、1つの連絡先に多くのContactFields(住所と電話番号)を持たせたいのですが...では、それらの連絡先が多く所属しているのはどこに置くべきですか?ありがとう

4

2 に答える 2

1

あなたはすでにそれを平易な英語で言いました:-)

会社であろうと個人であろうと、1つの連絡先に多くのContactFields(住所と電話番号)を持たせたいのですが...では、それらの多くの連絡先と所属先をどこに置くべきですか?ありがとう

クラスContact<ActiveRecord:: Base
 has_many:contact_fields
終わり

クラスContactField<ActiveRecord:: Base
 所属する:連絡先
終わり

この関係は、住所と電話の両方に継承されます

于 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レコードを返すだけです。サブクラスのいずれかで定義されたメソッドが必要な場合は、いつでもbecomesメソッドを使用できます。それを回避する方法はいくつかあります。私がしたように、そのような余分な関連付けを追加します。またはActiveRecord::Base#becomesを使用する

于 2009-12-15T12:10:19.967 に答える