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 种方法:首先返回第一个位置,第二个第二个,第三个 - 或连接。

我必须能够在我的应用程序中使用所有 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 回答