首页 > 解决方案 > 获取日期早于今天日期的所有工作,并按用户和每个工作的评论数进行过滤

问题描述

我需要获取属于当前用户且日期早于今天日期的所有作业,并且我还需要过滤具有零评论的作业。

我尝试了以下方法:

Job.joins(:user, :review).where("jobs.date < ? AND jobs.status = ? AND users.id = ?", Time.now, 3 , user.id).group("jobs.id").having("COUNT(reviews) = ?", 0)

如果是特定用户 ID (3356),我应该得到一份工作,但我没有得到。

这是我的模型

class Job < ActiveRecord::Base
  belongs_to :user
  has_one :review
end

class User < ActiveRecord::Base
  has_many :jobs
  has_one :reviews
end

class Review < ActiveRecord::Base
  belongs_to :job
  belongs_to :user
end

status是一个枚举(需要为 3,即“已接受”)

我究竟做错了什么?我不确定如何正确构建 SQL,所以这可能是问题所在。感谢你的帮助。

标签: ruby-on-railsactiverecord

解决方案


你需要做左外连接而不是内连接,如果你做内连接,如果它有 0 条评论,它就不会工作,工作必须至少有一个评论,那么只有它会接受工作的记录,除了在左外连接中,它无论是否有审查,都会记录所有工作记录。

Job.left_outer_joins(:user, :reviews).where("jobs.date < ? AND jobs.status = ? AND users.id = ?", Time.now, 3 , user.id).group("jobs.id").having("COUNT(reviews) = ?", 0)

推荐阅读