首页 > 解决方案 > 在rails中一起使用'where'和'or'

问题描述

我有一个关于使用whereor一起的问题。

Item.where(a: true) 
.where("b>=?", 1) 
.or(Item.where(c: true)) 
.where(d: true)

我想要实现的是,在第一个条件之后a: true,查找是否有任何项目b >=?, 1。如果找到任何项目,则移动到第四个条件,where(d:true)如果没有找到,移动到第三个条件,or(Item.where(c: true)如果从第三个条件中找到一些项目,则移动到第四个条件.where(d:true)

这就是我想要实现的目标,但似乎当items达到第三个条件.or(Item.where(c: true))时,它没有通过前面的条件。

我在第三个条件中添加了先前的条件,例如or(Item.where(a:true).where("b>=?",1).where(c:true))但是有没有更好的方法来实现?

标签: ruby-on-rails

解决方案


“if”和“move to”不是查看 SQL 表达式的非常清晰的方式……通常最好将其视为一次全部计算,这与命令式语言不同。

但是,我认为这是您想要的查询:

a_items = Item.where(a: true)
a_items.where("b >= ?", 1).
  or(a_items.where(c: true)).
  where(d: true)

它基本上是相同的“重复里面的条件or”方法听起来你已经在使用,但我们没有实际重复它们,而是使用一个变量。


推荐阅读