Я пытаюсь создать сайт, похожий на taskrabbit или upwork, где член может опубликовать работу, а работник может подать заявку на работу. Это продолжение вопроса, который я недавно опубликовал. Я работаю над функцией поиска / отображения заданий и хочу вернуть набор результатов только с заданиями, которые соответствуют следующим критериям:
1) дата начала работы в будущем
2) работник еще не подал заявку на работу
3) клиент еще не принял предложение от другого работника
4) работник имеет соответствующие навыки, необходимые для работы
Благодаря @jvillian первые 2 требования выполняются с помощью класса в модели задания, но когда я попробовал несколько вариантов, чтобы исключить записи, в которых есть запись для задания в таблице win_bids (требование 3 - значение клиент принял ставку и больше не принимает заявки на работу) или если у работника нет всех навыков, перечисленных в таблице job_skills в таблице worker_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