Given the following classes:
class Candidate
has_many :applications
has_many :companies, :through => :job_offers
end
class JobOffer
belongs_to :company
There are likely many acceptable approaches to solve your issue but I think the bottom line is that you're trying to enforce a uniqueness constraint on the table that doesn't (directly) have all the attributes (both company
AND user
). I'd de-normalize the company
info into the application table (user_id
, job_offer_id
, company_id
) and always set it in a before_save
callback to match the job_offer
's company
. Then you should be able to use the scoped uniqueness validation:
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