ruby-on-rails - 获取日期早于今天日期的所有工作,并按用户和每个工作的评论数进行过滤
问题描述
我需要获取属于当前用户且日期早于今天日期的所有作业,并且我还需要过滤具有零评论的作业。
我尝试了以下方法:
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,所以这可能是问题所在。感谢你的帮助。
解决方案
你需要做左外连接而不是内连接,如果你做内连接,如果它有 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)
推荐阅读
- excel - 有没有办法在excel中计算工作时间
- postgresql - 在 postgres 中查询 pg_class 以获取索引名称时,为什么其中一些出现以 # 为前缀?
- r - 使用因子列在 r 中创建一个数值列
- javascript - 尝试使用javascript使用递归打印数字的阶乘,但没有给出预期的输出
- c++ - 为什么 if 语句没有打印出字符串?cpp
- vue.js - Vuetify v-treeview - 如何以编程方式打开节点?
- r - ggplot中的重叠丝带
- reason - 如何在 ReasonML 中将元组解构为 List.map?
- java - 从 XSL 访问 Java 公共静态
- typescript - 输入“默认客户端”
' 不可分配给类型 'ApolloClient