Вложенные атрибуты Rails, отношения для общего или общего объекта - PullRequest
0 голосов
/ 14 июня 2010

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

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

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

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

1 Ответ

0 голосов
/ 14 июня 2010

Я полагаю, вам следует использовать полиморфную ассоциацию .

Для этого вам нужно добавить 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
...