Pergunta

Eu tenho o seguinte escopo chamado:

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

Funciona bem assim no script/console

Article.find_all_that_match_tag(["cooking"])

Mas se eu usar assim, como parte de um escopo anônimo

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

Eu recebo um aviso, na segunda linha:

/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

Ainda funciona, mas o que está causando o aviso? E como faço para me livrar disso, por favor?

Foi útil?

Solução

Antes de tudo, provavelmente não me incomodaria em incluir um escopo anônimo sem condições.

Dito isto, acho que o aviso está no chamado para escopo como parte da cadeia sem argumento. Não deve ser necessário, você tem um escopo nomeado "find_all_that_match" que você deve simplesmente se encorrer a qualquer escopo anterior, anônimo ou nomeado.

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

Também pode valer a pena usar um escopo mais curto como "Tagged_as" ou simplesmente "Tagged"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top