我想写一个Rails 5的finder查询,如果一个字段不属于某个值集或为null,则返回对象。 我尝试了下面的方法
Order
.joins(...joins1...)
.joins(...joins2...)
.left_outer_joins(:customer => :program)
.where.not(
:programs => { :number => excluded_numbers }
).or(:programs => { :number => nil})
.where(...)
但这导致
ArgumentError: You have passed Hash object to #or. Pass an ActiveRecord::Relation object instead.
我的 "OR "子句的正确构成方式是什么?
正如错误所说,你必须通过一个 ActiveRecord::Relation
,现在你正在通过 { :programs => { :number => nil} }
哈希。
试与。
orders = Order.joins(...).joins(...).left_outer_joins(customer: :program)
orders.where.not(programs: { number: excluded_numbers })
.or(orders.where(programs: { number: nil }))
.where(...)
条件是... or
工作是 两种关系在结构上必须兼容所以,这两个变量都必须包括你所使用的连接和左_外连接。这就是将它们存储在本地变量中的目的。