你如何“或”两个或更多的范围

时间:2013-04-22 09:24:20

标签: ruby-on-rails ruby activerecord

假设User有两个范围,“non_member”和“new_user”。我想或他们,包括加入和订购。

我试图提取where子句来构造两个范围的OR语句。但是,不包括联接和订单。

e.g。

non_member_where = User.non_member.where_values.reduce(:and)
new_user_where = User.new_user.where_values.reduce(:and)

@users = User.where("#{non_member_where} OR #{new_user_where}") 

非会员范围需要加入会员资格表。如果您使用上面的代码,则不会加入,因为它只关注where。

有没有更好的方法如何“或”两个范围?像

这样的东西
@users = User.non_member.or.new_user

输出的内容如下:

SELECT users.* FROM users LEFT JOINS memberships ON memberships.user_id = users.id
  WHERE((memberships.user_id IS NULL) OR (users.created_at < {{2 days ago}})

我正在使用rails 3.2.12

1 个答案:

答案 0 :(得分:0)

ActiveRecord构建在名为AReL的库之上。 您可以下拉到AReL表并获得此功能。

或者你也可以使用Squeel gem来做同样的事情,但会给你一个更高级别的API。

查看吱吱声:https://github.com/ernie/squeel