【问题标题】:Chaining Named Scopes not working as intended链接命名范围未按预期工作
【发布时间】:2010-06-10 17:43:11
【问题描述】:

我定义了 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 的问题吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    Numbers.even.all + Numbers.odd.all
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多