Подтвердить наличие взаимоисключающих ассоциаций - PullRequest
0 голосов
/ 25 июля 2010

У меня есть модель резюме, в которой есть две ассоциации (документы и мастера). Документ - это загруженное резюме, а мастер - это вывод от пользователя, использующего мастер возобновления. Это взаимоисключающие модели. Как я могу проверить, что пользователь создал документ или мастер при проверке резюме?

Я строю ассоциацию в моем контроллере резюме как таковом.

if params[:document]
  @document = @resume.build_document(params[:document])
else
  @wizard = @resume.build_wizard(params[:wizard])
end

Затем я либо делаю резюме.save, либо резюме.update_attributes (params [: resume]).

1 Ответ

2 голосов
/ 25 июля 2010

Использовать полиморфный has_one / belongs_to. Тогда вы можете просто присвоить атрибут documented вашему Resume объекту:

class Resume < ActiveRecord::Base
  belongs_to :documented, :polymorphic => true

  # this line validates the presence of associated object (Wizard or Document)
  validates_associated :documented
end

class Document < ActiveRecord::Base
  has_one :resume, :as => :documented
end

class Wizard < ActiveRecord::Base
  has_one :resume, :as => :documented
end

>> document = Document.create(...)
>> resume = Resume.find(...)
>> resume.documented = documented
>> resume.save!
>> resume.documented.class # => Document
>> wizard = Wizard.create(...)
>> resume.documented = wizard
>> resume.save!
>> resume.documented.class # => Wizard
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...