9

有没有办法以加法方式组合范围?

如果我有范围

User.big_haired

User.plays_guitar

我可以打电话

User.big_haired.plays_guitar

并获得所有有大头发和弹吉他的用户。我可以写这个来吸引所有有大头发或弹吉他的用户吗?

我想我必须补充一点,我意识到您可以运行一组查询并将结果加在一起。这就是我试图不做的事情。

4

3 回答 3

2

所以你有了:

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
于 2009-08-12T03:10:21.247 回答
2

试试 Searchlogic,它最近支持将命名范围与 OR 组合

于 2009-08-31T22:39:09.140 回答
0

我刚刚在我的一些定义了 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
于 2009-08-12T18:38:20.747 回答