【问题标题】:How do you "OR" a two or more scope你如何“或”两个或更多范围
【发布时间】:2013-04-15 03:30:51
【问题描述】:

假设用户有两个范围,“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}})

我正在使用 rails 3.2.12

【问题讨论】:

  • 我最近尝试这样做,发现活动记录对OR的支持很差。最近可能变了。你用的是什么 Rails 版本?
  • 我正在使用 rails 3.2.12

标签: ruby-on-rails ruby activerecord


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    相关资源
    最近更新 更多