Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rails ActiveRelation-使用范围'链接条件为或、非和的位置;合并_Ruby On Rails 3_Activerecord - Fatal编程技术网

Ruby on rails 3 Rails ActiveRelation-使用范围'链接条件为或、非和的位置;合并

Ruby on rails 3 Rails ActiveRelation-使用范围'链接条件为或、非和的位置;合并,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,我很熟悉你可以做这样的事情 .where('guests.name ILIKE ?', "%#{term}%").where('orders.number = ?', term) Order.includes(:guest).merge(Guest.matches_name(term)).where('orders.number = ?', term) 这将生成一个“And”查询,匹配guests.name和orders.number 我想做这些或代替和。Objective-C有一个整洁的东

我很熟悉你可以做这样的事情

.where('guests.name ILIKE ?', "%#{term}%").where('orders.number = ?', term)
Order.includes(:guest).merge(Guest.matches_name(term)).where('orders.number = ?', term)
这将生成一个“And”查询,匹配guests.name和orders.number

我想做这些或代替和。Objective-C有一个整洁的东西叫做NSCompoundPredicates,这就是我要找的

我也知道我可以将.where放在同一个参数中,并指定“OR”。但是,我的来宾表上有一个助手作用域,如下所示:

scope :matches_name, -> (name) { where("(guests.first_name || ' ' || guests.last_name) ILIKE ?", "%#{name}%")}
所以很自然地,我喜欢使用它,并将其他条件或条件链接在一起。差不多

.where('guests.name ILIKE ?', "%#{term}%").where('orders.number = ?', term)
Order.includes(:guest).merge(Guest.matches_name(term)).where('orders.number = ?', term)

这可能吗?

您可以使用arel实现这一点,arel在较新版本中具有
功能

例如:

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