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

时间:2014-03-18 05:50:55

标签: ruby-on-rails-3 activerecord

我很熟悉你可以做点什么

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

这会生成一个“AND”查询,匹配guests.name和orders.number。

我想制作那些OR而不是AND。 Objective-C有一个很好的东西,叫做NSCompoundPredicates,这就是我要找的东西。

我也知道我可以将.where放入相同的参数并指定“OR”。但是,我的guest表上有一个帮助器范围,如下所示:

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)

这可能吗?

1 个答案:

答案 0 :(得分:0)

您可以使用arel实现此目的,它在较新版本中具有.or功能。

示例:

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