在Rails 5中,我如何写一个finder "OR "查询,说从一个列表中exlucde或者是nil?

问题描述 投票:0回答:1

我想写一个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 "子句的正确构成方式是什么?

ruby-on-rails-5 where-clause finder
1个回答
1
投票

正如错误所说,你必须通过一个 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 工作是 两种关系在结构上必须兼容所以,这两个变量都必须包括你所使用的连接和左_外连接。这就是将它们存储在本地变量中的目的。

© www.soinside.com 2019 - 2024. All rights reserved.