1

假设用户有两个范围,“non_member”和“new_user”。我想对它们进行 OR,包括加入和订购。

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

例如

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}") 

非成员范围需要加入成员资格表。如果您使用上面的代码,则不会加入,因为它仅与位置有关。

有没有更好的方法来“或”两个范围?就像是

@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}})

我正在使用导轨 3.2.12

4

1 回答 1

0

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

或者,您可以使用 Squeel gem,它可以做同样的事情,但会为您提供更高级别的 API。

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

于 2013-04-22T12:27:24.523 回答