Связь между двумя моделями наследования с одной таблицей

StackOverflow https://stackoverflow.com/questions/1906967

Вопрос

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

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

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

Это было полезно?

Решение

Вы уже сказали это простым языком :-)

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

class Contact < ActiveRecord::Base
 has_many :contact_fields
end

class ContactField < ActiveRecord::Base
 belongs_to :contact
end

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top