有没有办法以添加方式组合范围?
如果我有范围
User.big_haired
和
User.plays_guitar
我可以打电话
User.big_haired.plays_guitar
让所有拥有大头发并且弹吉他的用户。我可以写这个来让所有有头发的用户或弹吉他吗?
我想我必须补充一点,我意识到你可以运行一组查询并将结果添加到一起。这就是我不想做的事情。
答案 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