Ruby on rails 从sql中获取没有与特定字段值关联的对象的对象
我有工作和反馈模型 它们是这样关联的:Ruby on rails 从sql中获取没有与特定字段值关联的对象的对象,ruby-on-rails,ruby,postgresql,ruby-on-rails-4,squeel,Ruby On Rails,Ruby,Postgresql,Ruby On Rails 4,Squeel,我有工作和反馈模型 它们是这样关联的: 工作有很多反馈 反馈属于:工作 我正在尝试进行查询,以获取没有反馈的作业。用户id==job.client idjobs=job.all jobs=Job.all no_feedback_jobs=Array.new jobs.each do |job|{ (no_feedback_jobs<< job) if !job.feedback} 无反馈作业=Array.new jobs.each do | job |{(无反馈{u jobs 试试
工作有很多反馈
反馈属于:工作
我正在尝试进行查询,以获取没有反馈的作业。用户id==job.client idjobs=job.all
jobs=Job.all
no_feedback_jobs=Array.new
jobs.each do |job|{ (no_feedback_jobs<< job) if !job.feedback}
无反馈作业=Array.new
jobs.each do | job |{(无反馈{u jobs
试试这个
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\u将是没有反馈的jobs的id数组。这使用了两个查询,但是pull
应该相对较轻
Job.includes(:feedbacks)
.where(feedbacks: {id: nil})
.where.not(client_id: Feedback.pluck(:user_id))
粘贴您正试图粘贴的代码do@user123jobs\u as\u worker=当前用户。jobs\u as\u worker.包括(:反馈)。其中{client\u id.not\u在反馈中。选择{user\u id}.uniq}
这很有效,但我想在数据库中这样做,因为如果我有很多记录,速度会非常慢。我想这是一样的。jobs\u as\u worker=current\u user.jobs\u as\u worker.includes(:feedbacks)。其中{client\u id.not\u in Feedback.select{user\u id}.uniq}
此代码工作,但不是以我需要的方式。我需要使用数据库中的所有反馈–反馈。选择{user\u id}.uniq
,但只针对特定作业进行反馈,如作业。反馈。选择{user\u id}.uniq
–但我不能这样做。不,我想要的是那些没有反馈的工作。user\u id==job.client\u id
那么在你的代码中你为什么要写当前用户。jobs\u作为\u worker?我想要属于当前用户的工作
,我在问同样的问题,我不需要没有任何fe的工作edbacks
。我需要作业
无反馈
有用户id==job.client\u id
。如果作业有任何其他用户id
的反馈-没关系。什么。哪里(反馈:{id:nil}
意味着什么?id
可以是nil
?作业。包括(:反馈)。哪里(反馈:{id:nil})
返回没有反馈的作业。此查询返回其客户端有反馈的作业。我需要其客户端没有为此特定作业获得反馈的作业。我需要类似以下内容:。包括(:反馈)。其中(反馈:{id:nil})。何处。非(反馈:{user\u id:job.client\id})
–但我不能让它工作。在最后一行添加一个not
怎么样?
Job.includes(:feedbacks)
.where(feedbacks: {id: nil})
.where.not(client_id: Feedback.pluck(:user_id))