Che*_*ezy 3 activerecord named-scope ruby-on-rails
我有2个简单的命名范围定义如下:
class Numbers < ActiveRecord::Base
named_scope :even, :conditions => {:title => ['2','4','6']}
named_scope :odd, :conditions => {:title => ['1','3','5']}
end
Run Code Online (Sandbox Code Playgroud)
如果我打电话给Numbers.even我回来2,4,6这是正确的,如果我打电话给Numbers.odd我回来1,3,5这是正确的
当我将它们链接在一起时:Numbers.even.odd我得到1,3,5因为这是我引用的最后一个范围.所以,如果我说Numbers.odd.even,我实际上会得到2,4,6.
当我将它们链接在一起时,我希望得到1,2,3,4,5,6.我尝试的另一种方法是:
named_scope :even, :conditions => ["title IN (?)", ['2', '4','6']]
named_scope :odd, :conditions => ["title IN (?)", ['1', '3','5']]
Run Code Online (Sandbox Code Playgroud)
但是当我将它们链接在一起时,我得不到任何结果,因为它创建的查询看起来像这样:
SELECT * FROM `numbers`
WHERE ((title IN ('1','3','5')) AND (title IN ('2','4',6')))
Run Code Online (Sandbox Code Playgroud)
'AND'子句应该改为OR,但我不知道如何强迫它.这可能是ActiveRecord的一个问题吗?
这是ActiveRecord如何处理范围的问题.应用多个范围时,结果将与AND连接在一起.没有使用OR的选项.
您需要做的是组合两个结果集:
Numbers.even.all + Numbers.odd.all
Run Code Online (Sandbox Code Playgroud)