【问题标题】:Validate Presence of Mutually Exclusive Associations验证互斥关联的存在
【发布时间】:2010-07-25 17:46:11
【问题描述】:
我的简历模型有两个关联(文档和向导)。文档是上传的简历,而向导是用户使用简历向导的输出。这些是相互排斥的模型。验证简历时如何验证用户是否创建了文档或向导?
我正在我的简历控制器中建立关联。
如果参数 [:文档]
@document = @resume.build_document(params[:document])
别的
@wizard = @resume.build_wizard(params[:wizard])
结尾
然后我执行 resume.save 或 resume.update_attributes(params[:resume])。
【问题讨论】:
标签:
ruby-on-rails
validation
forms
【解决方案1】:
使用多态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