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"])

2行目に警告が表示されます。

/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

まず第一に、私はおそらく無条件の匿名スコープを含めることを気にしないでしょう。

とは言うものの、警告は、引数のないチェーンの一部としてスコープを指定するための呼び出しにあると思います。必須ではありません。名前付きスコープ「find_all_that_match」があり、匿名または名前付きの以前のスコープに簡単にチェーンできます。

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

「tagged_as」や単に「tagged」のような短い名前のスコープを使用する価値があるかもしれません

于 2010-03-23T09:44:47.747 に答える