Validate uniqueness of in association

前端 未结 4 1092
被撕碎了的回忆
被撕碎了的回忆 2021-02-05 12:46

Given the following classes:

class Candidate
  has_many :applications
  has_many :companies, :through => :job_offers
end

class JobOffer
  belongs_to :company         


        
4条回答
  •  情书的邮戳
    2021-02-05 13:40

    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
    

提交回复
热议问题