Rails ActiveRelation - 链接条件为 OR,而不是 AND,使用 scope 和 .merge



我知道你可以这样做

.where('guests.name ILIKE ?', "%#{term}%").where('orders.number = ?', term)

生成一个"And"查询,匹配guests.name和orders.number。

我想让那些是OR而不是AND。Objective-C有一个整洁的东西叫做NSCompoundPredicates这就是我正在寻找的。

我还知道我可以将。where放入相同的参数中并指定"OR"。但是,我在我的来宾表上有一个helper作用域,如下所示:

scope :matches_name, -> (name) { where("(guests.first_name || ' ' || guests.last_name) ILIKE ?", "%#{name}%")}

所以我很自然地喜欢使用它,并将其他OR条件链接在一起。就像

Order.includes(:guest).merge(Guest.matches_name(term)).where('orders.number = ?', term)

这可能吗?

您可以使用arel实现这一点,它在较新的版本中具有.or函数。

的例子:

foos = Foo.arel_table
Foo.where(foos[:bar].eq(true).or(foos[:baz].match('%foo%')))

相关内容

  • 没有找到相关文章

最新更新