Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从sql中获取没有与特定字段值关联的对象的对象_Ruby On Rails_Ruby_Postgresql_Ruby On Rails 4_Squeel - Fatal编程技术网

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 id

jobs=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@user123
jobs\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))