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 

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

ответ

1

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

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

 

class Contact < ActiveRecord::Base 
has_many :contact_fields 
end 

class ContactField < ActiveRecord::Base 
belongs_to :contact 
end 

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

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

Смежные вопросы