使用named_scope添加链接

时间:2009-08-12 02:36:36

标签: ruby-on-rails activerecord named-scope

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

如果我有范围

User.big_haired

User.plays_guitar

我可以打电话

User.big_haired.plays_guitar

让所有拥有大头发并且弹吉他的用户。我可以写这个来让所有有头发的用户或弹吉他吗?

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

3 个答案:

答案 0 :(得分: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 =&gt;很多用户。

我不知道将两者混合在一起的方法。也许只是混合数组:

@users = (User.big_haired + User.plays_guitar).uniq

答案 1 :(得分:2)

尝试使用Searchlogic,最近supports combining named scopes with OR

答案 2 :(得分:0)

我刚试验了一些定义了named_scopes的模型。如果将它组合起来,它会将条件放在一起作为AND条件。所以......

User.big_haired.plays_guitar

将导致(显然是我的速记SQL,而不是真正的rails生成的东西)

SELECT * FROM users WHERE hair = 'massive' AND plays = 'guitar'

我不知道将它们组合成OR关系的方法。当你考虑各种选择时,混合在一起会非常复杂。我们一直链接named_scopes,它运行良好(只要你想要它们和它们在一起)。

为了做和案例,我要么创建一个特殊的命名范围,并在其上构建OR条件,或者使用union来生成一个如此唯一的集合:

User.big_haired | User.plays_guitar