Связь между двумя моделями наследования одной таблицы - PullRequest
0 голосов
/ 15 декабря 2009

У меня есть следующие две модели

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

Я хочу, чтобы у одного контакта, независимо от того, Компания это или Персона, было много Контактных полей (Адреса и Телефоны) ... Итак, куда я должен их поместить? *? Спасибо

Ответы [ 2 ]

1 голос
/ 15 декабря 2009

Похоже, вы описываете принадлежность к отношениям. Ассоциации должны быть определены в родительском классе, чтобы они могли наследоваться подклассами.

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. Если вам нужны методы, определенные в любом из подклассов, вы всегда можете использовать метод gets. Есть несколько способов обойти это. Такое добавление дополнительных ассоциаций, как я сделал. Или используя ActiveRecord :: Base # становится

1 голос
/ 15 декабря 2009

Вы уже сказали это по-английски :-)

Я хочу, чтобы у одного контакта, независимо от того, Компания это или Персона, было много Контактных полей (Адреса и Телефоны) ... Итак, куда я должен поместить те, которые имеют много и принадлежат? Спасибо


class Contact < ActiveRecord::Base
 has_many :contact_fields
end

class ContactField < ActiveRecord::Base
 belongs_to :contact
end

Это отношение будет наследоваться как по адресу, так и по телефону.

...