有没有办法以加法方式组合范围?
如果我有范围
User.big_haired
和
User.plays_guitar
我可以打电话
User.big_haired.plays_guitar
并获得所有有大头发和弹吉他的用户。我可以写这个来吸引所有有大头发或弹吉他的用户吗?
我想我必须补充一点,我意识到您可以运行一组查询并将结果加在一起。这就是我试图不做的事情。
有没有办法以加法方式组合范围?
如果我有范围
User.big_haired
和
User.plays_guitar
我可以打电话
User.big_haired.plays_guitar
并获得所有有大头发和弹吉他的用户。我可以写这个来吸引所有有大头发或弹吉他的用户吗?
我想我必须补充一点,我意识到您可以运行一组查询并将结果加在一起。这就是我试图不做的事情。
所以你有了:
class User < ActiveRecord::Base
named_scope :big_haired, :conditions => {:hair => 'massive'}
named_scope :plays_guitar, :conditions => {:plays => 'guitar'}
end
User.big_haired.plays_guitar => 很多用户。
我不知道将两者混合在一起的方法。也许只是混合数组:
@users = (User.big_haired + User.plays_guitar).uniq
试试 Searchlogic,它最近支持将命名范围与 OR 组合
我刚刚在我的一些定义了 named_scopes 的模型上尝试了这一点。如果您将其组合起来,它将把条件作为 AND 条件放在一起。所以...
User.big_haired.plays_guitar
将导致(显然是我的速记 SQL,而不是真正的 rails 生成的东西)
SELECT * FROM users WHERE hair = 'massive' AND plays = 'guitar'
我不知道将它们组合为 OR 关系的方法。当您考虑各种选项时,这将是非常复杂的混合。我们一直将 named_scopes 链接起来,它运行良好(只要您希望它们与在一起)。
要做到这种情况,我会创建一个特殊的命名范围,其中包含 OR 条件,或者使用联合来生成一个独特的集合,如下所示:
User.big_haired | User.plays_guitar