Получить объекты из SQL, которые не имеют связанных объектов с определенным значением поля

У меня есть модели Job и Feedback.

Они связаны так:

Job has_many :feedbacks Feedback belongs_to :job

Я пытаюсь сделать запрос, чтобы получить работу, которая не имеет обратной связи с feedback.user_id == job.client_id

4 ответа

 jobs=Job.find(:all, :select => 'DISTINCT id', :order=>"id asc").map { |n| n.id.to_s })
 feedbacks=Feedback.find(:all, :select => 'DISTINCT job_id', :order=>"job_id asc").map { |n| n.job_id.to_s })
 jobs_without_feedbacks=jobs-feedbacks

Хорошо. тогда попробуй это. это может работать хорошо в вашем случае. jobs_without_feedbacks будет массивом идентификаторов задания без обратной связи.

jobs=Job.all
no_feedback_jobs=Array.new
jobs.each do |job|{ (no_feedback_jobs<< job) if !job.feedback}

Попробуйте это. Это будет работать нормально

feedbacks = Feedback.map(&:user_id).uniq

User.includes(:jobs => :feedbacks).where.not(:client_id => feedbacks).where(:id => current_user.id)

Попробуй это

Это использует два запроса, но pluck должно быть относительно легким.

Job.includes(:feedbacks)
  .where(feedbacks: {id: nil})
  .where.not(client_id: Feedback.pluck(:user_id))
Другие вопросы по тегам