我想写一个在where子句中使用OR语句的查询,但只有一个where子句:
以这个查询为例:
Job
.joins(:quote)
.joins(:revisions)
.where.not(revisions: {approved_date: nil})
.where(billed_date: nil)
.where(art_billed_date: nil)
.where.not(quote: {approval_date: nil})
.or(Job.where(company_id: [companies_to_display]))
最后两个链条出了问题
.where.not(quote: {approval_date: nil})
.or(Job.where(company_id: [companies_to_display]))
它们应该一起使用,并且相互依赖。我想要的是如果报价.approval_date为NIL,则仅查找要显示的公司
我如何使用Rails 7使用OR来实现这一点?
2条答案
按热度按时间bnl4lu3b1#
我觉得这个可以。你需要所有的作业-甚至那些没有引号的作业(left_join),然后限定结果为not(quote:{批准日期:nil})或company_id:[companies_to_display].
oyt4ldly2#
我可以使用
.scoping
方法解决这个问题。唯一的缺点是我在这里构建了三个查询而不是两个。查看重复的join/custom include语句。至于我的应用程序,它将吐出的记录永远不会变得那么大,因为它们是积极维护的,但如果有大量的记录,这将是一个问题。
任何重构建议都值得赞赏!