Domanda

Ho il seguente campo di applicazione denominata:

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

Funziona bene come questo nello script / console

Article.find_all_that_match_tag(["cooking"])

Ma se io uso in questo modo, come parte di un ambito anonimo

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

Ho ricevuto un avviso, sulla seconda riga:

/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

Funziona ancora, ma che cosa è causando l'avvertimento? E come faccio a sbarazzarsi di esso per favore?

È stato utile?

Soluzione

Prima di tutto io probabilmente non si preoccupano tra cui un campo di applicazione anonima senza condizioni.

Detto questo, credo che l'avvertimento è nella chiamata a ambito come parte della catena con alcun argomento. Non dovrebbe essere necessario, è stato un ambito denominato "find_all_that_match" che si dovrebbe essere in grado di concatenare semplicemente per tutti gli ambiti precedenti, anonimi o con nome.

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

Potrebbe anche valere la pena di utilizzare una più breve ambito denominato come "tagged_as" o semplicemente "tag"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top