在 Rails 5 中,如何编写一个 finder "OR" 查询来表示从列表中排除或为 nil?
In Rails 5, how do I write a finder "OR" query to say exlucde from a list or be nil?
我想编写一个 Rails 5 finder 查询,如果字段不属于某个值集或为空,则 returns 对象。我尝试了以下
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
工作的条件是这两个关系必须在结构上兼容,因此,两者都必须包括连接和 left_outer_joins 你'重新使用。这就是将它们存储在局部变量中的目的。
我想编写一个 Rails 5 finder 查询,如果字段不属于某个值集或为空,则 returns 对象。我尝试了以下
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
工作的条件是这两个关系必须在结构上兼容,因此,两者都必须包括连接和 left_outer_joins 你'重新使用。这就是将它们存储在局部变量中的目的。