给定以下课程:
class Candidate
has_many :applications
has_many :companies, :through => :job_offers
end
class JobOffer
belongs_to :company
end
class Application
belongs_to :candidate
belongs_to :job_offer
end
如何在 Rails 上验证前面的语句(图中)?
更新时,在应用程序上添加以下验证将不起作用:
def validate_uniqueness_of_candidate_within_company
errors.add(:job_offer_id, "...") if candidate.companies.include?(company)
end
因为当尝试将申请更改为同一公司的不同 JobOffer 时,candidate.companies 将返回该公司。
我也尝试在应用程序上做这样的事情:
validates_uniqueness_of :user_id, :scope => {:job_offer => :company_id}
但它也不起作用。
有什么想法可以解决这个问题而不必使用 10 行蹩脚的代码吗?
可能有许多可接受的方法来解决您的问题,但我认为底线是您试图对不(直接)具有所有属性(两者)的表强制执行唯一性约束company
AND user
)。我会反规范化company
信息写入应用程序表(user_id
, job_offer_id
, company_id
)并始终将其设置为before_save
回调来匹配job_offer
's company
。然后您应该能够使用范围唯一性验证:
class JobApplication < ActiveRecord::Base
belongs_to :user
belongs_to :job_offer
belongs_to :hiring_company, :class_name=>"Company", :foreign_key=>"company_id"
before_save :set_hiring_company
def set_hiring_company
self.hiring_company = job_offer.hiring_company
end
validates_uniqueness_of :user_id, :scope => :company_id
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)