0

Это должно быть распространенной проблемой, поэтому я удивлен тем, что Google не получил больше ответов. Я работаю над приложением rails, которое имеет несколько разных типов сущностей, эти объекты нуждаются в отношении к другому объекту. Например:Rails Вложенные атрибуты, отношения для общего или общего объекта

  1. Address: модель, которая хранит деталь адреса улицы (это мое общего объектную)
  2. PersonContact: модель, которая включает в себя такие вещи, как домашний телефон, мобильный телефон и адрес электронной почты. Эта модель должна иметь связанный с ней адрес.
  3. DogContact: Очевидно, что если вы хотите связаться с собакой, вам нужно идти туда, где она живет.

Так, PersonContact и DogContact должны иметь внешние ключи Address. Даже, хотя они действительно «владеющий» объект Address. Это было бы хорошо, за исключением того, что accepts_nested_attributes_for рассчитывает, что внешний ключ находится в Address, чтобы работать правильно.

Какова правильная стратегия сохранения внешнего ключа в Address, но есть PersonContact и DogContact быть собственными объектами?

ответ

0

Я считаю, вы должны использовать polymorphic association.

Для этого вам необходимо добавить addressable_id и addressable_type на стол addresses. И ваши модели должны выглядеть так:

class Address < ActiveRecord::Base 
    belongs_to :addressable, :polymorphic => true  
end 

class PersonContact < ActiveRecord::Base 
    has_one :address, :as => :addressable 
end 

class DogContact < ActiveRecord::Base 
    has_one :address, :as => :addressable 
end 
Смежные вопросы