我有以下命名范围:
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
它仍然有效,但是什么引起了警告?我该如何摆脱它?
答案 0 :(得分:1)
首先,我可能不会打扰包括没有条件的匿名范围。
那就是说,我认为警告是在作为链的一部分的范围内调用而没有参数。它没有必要,你有一个命名范围“find_all_that_match”,你应该能够简单地链接到任何以前的范围,匿名或命名。
scope = Article.scoped({})
scope.find_all_that_match_tag(["cooking"])
也可能值得使用较短的命名范围,例如“tagged_as”或简单地“标记”