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?

¿Fue útil?

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"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top