Aviso ao usar um nome nomeado como parte de um escopo anônimo
-
21-09-2019 - |
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?
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