0

我有以下命名范围:

named_scope :find_all_that_match_tag, lambda { |tags| {
            :select => "articles.id, tags.name",
            :joins => :tags,
            :conditions => ["tags.name IN (?)",tags]}
          }

它在脚本/控制台中像这样工作得很好

Article.find_all_that_match_tag(["cooking"])

但是如果我像这样使用它,作为匿名范围的一部分

scope = Article.scoped({})
scope = scope.scoped.find_all_that_match_tag(["cooking"])

我在第二行收到警告:

/Users/Server/.gem/ruby/1.8/gems/activerecord-2.3.4/lib/active_record/named_scope.rb:13: warning: multiple values for a block parameter (0 for 1)
from /Users/Server/.gem/ruby/1.8/gems/activerecord-2.3.4/lib/active_record/named_scope.rb:92

它仍然有效,但是导致警告的原因是什么?我该如何摆脱它?

4

1 回答 1

1

首先,我可能不会在没有条件的情况下包含匿名范围。

也就是说,我认为警告是在调用 scoped 作为链的一部分,没有参数。没有必要,您有一​​个命名范围“find_all_that_match”,您应该能够简单地链接到任何以前的范围,匿名或命名。

scope = Article.scoped({})
scope.find_all_that_match_tag(["cooking"])

可能也值得使用更短的命名范围,如“tagged_as”或简单的“tagged”

于 2010-03-23T09:44:47.747 回答