3

我有 2 个简单的命名范围,定义如下:

class Numbers < ActiveRecord::Base
  named_scope :even, :conditions => {:title => ['2','4','6']}
  named_scope :odd, :conditions => {:title => ['1','3','5']}
end

如果我打电话给 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']]

但是当我将它们链接在一起时我没有得到任何结果,因为它创建的查询如下所示:

SELECT * FROM `numbers` 
WHERE ((title IN ('1','3','5')) AND (title IN ('2','4',6')))

'AND' 子句应该改为 OR,但我不知道如何强制。这可能是 ActiveRecord 的问题吗?

4

1 回答 1

5

这是 ActiveRecord 如何处理范围的问题。当您应用多个范围时,结果将使用 AND 连接在一起。没有使用 OR 的选项。

您需要做的是组合两个结果集:

Numbers.even.all + Numbers.odd.all
于 2010-06-10T18:04:54.130 回答