Rails ActiveRecord - 如果在不同的表中记录,则排除结果

时间:2018-05-04 18:09:56

标签: ruby-on-rails ruby activerecord

我正在尝试创建类似于taskrabbit或upwork的网站,其中成员可以发布作业,而工作人员可以提交作业的出价。这是我最近发布的一个问题的后续跟进。我正在处理搜索/作业显示功能,并希望返回仅包含符合以下条件的作业的结果集:

1)工作开始日期是将来 2)工人还没有投标 3)客户尚未接受来自不同工人的投标 4)工人具有工作所需的适当技能

感谢@jvillian,前两个要求是通过作业模型中的类完成的,但是当我尝试了多个变体来排除wins_bids表中有作业条目的记录时(要求3 - 意思是客户已接受出价并且不接受该作业的任何其他出价)或当该工作人员没有在worker_skills表中的job_skills表中列出所有技能时(要求4 - 表示他们没有所有技能)这项工作所需)

如何修改Job类中的搜索条件以满足要求3和4?

模型如下:

class Worker < ApplicationRecord
    has_many :bids
    has_many :winning_bids
    has_many :abilities, through: :job_options
end

class Skill < ApplicationRecord
    has_many :job_skills
    has_many :jobs, through: :job_skills
    has_many :worker_skills
    has_many :skills, through: :worker_skills
end

class WorkerSkill < ApplicationRecord
    belongs_to :worker
    belongs_to :skill
end

class Job < ApplicationRecord
    has_many :bids
    has_many :skills
    has_many :job_skills
    has_many :skills, through: :job_skills

    def self.available_for_bid(worker)
        where.not(id: worker.job_ids).where('start_date > ?', Date.today)
    end
end

class JobSkill < ApplicationRecord
    belongs_to :job
    belongs_to :skill
end

class Bid < ApplicationRecord
    belongs_to :job
    belongs_to :worker
end

class WinningBid < ApplicationRecord
  belongs_to :job
  belongs_to :worker
end

0 个答案:

没有答案