使用named_scope作为匿名范围的一部分时发出警告

时间:2010-03-22 19:04:46

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

我有以下命名范围:

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

它仍然有效,但是什么引起了警告?我该如何摆脱它?

1 个答案:

答案 0 :(得分:1)

首先,我可能不会打扰包括没有条件的匿名范围。

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

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

也可能值得使用较短的命名范围,例如“tagged_as”或简单地“标记”