通过 OR 或 AND 连接(粘合)where 条件(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种方法:第一个返回第一个where,第二个第二个,第三个 - OR 连接。
我必须能够在我的应用程序中使用所有 3 种方法并保存DRY代码
I have several complex queries (using subqueries, etc...) and want to glue them together with OR or AND statement.
For example:
where1=table.where(...)
where2=table.where(...)
I would like something like
where3=where1.or where2
Next example doesn't work for me:
users.where(users[:name].eq('bob').or(users[:age].lt(25)))
because of I have several where(..) queries and I want to concatenate them.
In other words
I have 3 methods: first return first where, second-second, third - OR concatenation.
I must have able to use all 3 methods in my application and save DRY code
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您是否正在寻找以下形式:
文档:https://github.com/rails/arel
are you looking for the form:
docs: https://github.com/rails/arel
users.where(users[:name].eq('bob').or(users[:age].lt(25))) 很接近,但是您需要获取 arel_table 来指定列,例如
users.where(users[:name].eq('bob').or(users[:age].lt(25))) is close, but you need to get the arel_table to specify the columns, e.g.
我知道对于 AND 连接,你可以这样做:
并且你可以在 SQL 中得到 AND 的连接(在最后用
#to_sql
尝试)除此之外,你还可以这样做:
例如:
I know that for AND concatenation you can do:
and you get a concatenation with AND in SQL (try it with
#to_sql
at the end)Other than that you can do:
example: