假设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
答案 0 :(得分:0)
ActiveRecord构建在名为AReL的库之上。 您可以下拉到AReL表并获得此功能。
或者你也可以使用Squeel gem来做同样的事情,但会给你一个更高级别的API。