5

いくつかの複雑なクエリ(サブクエリなどを使用)があり、ORまたはANDステートメントでそれらを結合したいと思います。

例えば:

where1=table.where(...)
where2=table.where(...)

何か欲しいのですが

where3=where1.or where2

次の例は私にはうまくいきません:

users.where(users[:name].eq('bob').or(users[:age].lt(25)))

where(..)クエリがいくつかあり、それらを連結したいためです。

言い換えると

私には3つのメソッドがあります:最初に最初に返すwhere、2番目、2番目、3番目-または連結。

アプリケーションで3つのメソッドすべてを使用して、 DRYコードを保存できる必要があります

4

3 に答える 3

2

フォームをお探しですか:

users.where(users[:name].eq('bob').or(users[:age].lt(25)))

ドキュメント: https://github.com/rails/arel

于 2010-11-06T06:58:39.533 に答える
1

users.where(users[:name].eq('bob').or(users[:age].lt(25))) は近いですが、列を指定するには arel_table を取得する必要があります。

t = User.arel_table
User.where(t[:name].eq('bob').or(t[:age].lt(25)))
于 2011-08-23T23:14:43.463 に答える
0

AND連結の場合、次のことができることを知っています:

users = User.where(:name => 'jack')
users = users.where(:job => 'developer')

そして、SQLでANDを使用して連結を取得します(最後に試してください#to_sql

それ以外にできること:

where1=table.where(...)
where2=table.where(...)
where1 & where2

例:

(User.where(:name => 'jack') & User.where(:job => 'dev')).to_sql
=> "SELECT `users`.* FROM `users` WHERE `users`.`name` = 'jack' AND `users`.`job` = 'dev'" 
于 2011-07-19T11:48:22.773 に答える