通过OR或AND连接(粘合)条件(Arel,Rails3)
我有几个复杂的查询(使用子查询等…)并希望将它们与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代码
你在寻找表格:
users.where(users[:name].eq('bob').or(users[:age].lt(25)))
docs: https : //github.com/rails/arel
users.where(users [:name] .eq(’bob’)。或(users [:age] .lt(25)))已关闭,但您需要获取arel_table来指定列,例如
t = User.arel_table User.where(t[:name].eq('bob').or(t[:age].lt(25)))
我知道,对于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'"