advertencia cuando se utiliza un named_scope como parte de un ámbito en el anonimato
-
21-09-2019 - |
Pregunta
Tengo el siguiente ámbito con nombre:
named_scope :find_all_that_match_tag, lambda { |tags| {
:select => "articles.id, tags.name",
:joins => :tags,
:conditions => ["tags.name IN (?)",tags]}
}
Funciona bien como esto en escritura / consola
Article.find_all_that_match_tag(["cooking"])
Pero si lo uso así, como parte de un ámbito en el anonimato
scope = Article.scoped({})
scope = scope.scoped.find_all_that_match_tag(["cooking"])
Aparece una advertencia, en la segunda línea:
/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
Todavía funciona, pero cuál está causando la advertencia? y cómo me deshago de ella por favor?
Solución
En primer lugar, probablemente no me molestaría que incluye un ámbito en el anonimato y sin condiciones.
Dicho esto, creo que la advertencia se encuentra en la llamada a la de ámbito como parte de la cadena sin ningún argumento. No debería ser necesario, tiene un alcance llamado "find_all_that_match" que usted debe ser capaz de simplemente cadena a conocer los alcances anteriores, anónima o con nombre.
scope = Article.scoped({})
scope.find_all_that_match_tag(["cooking"])
También podría valer la pena utilizar un alcance más corto llamado como "tagged_as" o simplemente "etiquetados"