在 rails 查询中使用大于小于时出现语法错误
syntax error when using greater than less than in rails query
User.where(is_individual: true)
.includes(:visitor)
.where(visitors: { finished: false })
.where(visitors: { step > 2 })
我正试图摆脱上述查询,但它返回了一个错误
syntax error, unexpected '}', expecting =>)
...visitors: { step > 2 })
但如果我按照下面的方式操作,它就可以工作了。
User.where(is_individual: true)
.includes(:visitor)
.where(visitors: { finished: false })
.where(visitors: { step: 2 })
因此查询不适用于大于运算符。
我什至尝试了下面的查询,但它仍然不起作用
User.where(is_individual: true)
.includes(:visitor)
.where(visitors: { finished: false })
.where(visitors: { "step > ?", 2 })
您 运行 遇到的语法错误是由于传递给最后一个 where
子句的参数结构所致 - { "step > ?", 2 }
不是有效的 Ruby 对象。
如果使用 Ruby 2.6 或更高版本,您可以利用其 endless range syntax 构建查询:
User
.includes(:visitor)
.where(is_individual: true, visitors: { finished: false, step: 3.. })
如果使用 Ruby 2.5 或更低版本,您可以使用 Float::INFINITY
:
生成相同的查询
User
.includes(:visitor)
.where(is_individual: true, visitors: { finished: false, step: 3..Float::INFINITY })
或者,您可以将 SQL 字符串传递给 where
以查询包含的模型(您需要通过 references 引用关联的 table) :
User
.includes(:visitor)
.references(:visitors)
.where(is_individual: true)
.where(visitors: { finished: false })
.where("visitors.step > ?", 2)
在这种情况下,您还可以显式使用 joins
来检索所需的结果:
User
.joins(:visitor)
.where(is_individual: true)
.where(visitors: { finished: false })
.where("visitors.step > ?", 2)
User.where(is_individual: true)
.includes(:visitor)
.where(visitors: { finished: false })
.where(visitors: { step > 2 })
我正试图摆脱上述查询,但它返回了一个错误
syntax error, unexpected '}', expecting =>)
...visitors: { step > 2 })
但如果我按照下面的方式操作,它就可以工作了。
User.where(is_individual: true)
.includes(:visitor)
.where(visitors: { finished: false })
.where(visitors: { step: 2 })
因此查询不适用于大于运算符。
我什至尝试了下面的查询,但它仍然不起作用
User.where(is_individual: true)
.includes(:visitor)
.where(visitors: { finished: false })
.where(visitors: { "step > ?", 2 })
您 运行 遇到的语法错误是由于传递给最后一个 where
子句的参数结构所致 - { "step > ?", 2 }
不是有效的 Ruby 对象。
如果使用 Ruby 2.6 或更高版本,您可以利用其 endless range syntax 构建查询:
User
.includes(:visitor)
.where(is_individual: true, visitors: { finished: false, step: 3.. })
如果使用 Ruby 2.5 或更低版本,您可以使用 Float::INFINITY
:
User
.includes(:visitor)
.where(is_individual: true, visitors: { finished: false, step: 3..Float::INFINITY })
或者,您可以将 SQL 字符串传递给 where
以查询包含的模型(您需要通过 references 引用关联的 table) :
User
.includes(:visitor)
.references(:visitors)
.where(is_individual: true)
.where(visitors: { finished: false })
.where("visitors.step > ?", 2)
在这种情况下,您还可以显式使用 joins
来检索所需的结果:
User
.joins(:visitor)
.where(is_individual: true)
.where(visitors: { finished: false })
.where("visitors.step > ?", 2)