Attenzione se si utilizza un named_scope come parte di un ambito anonimo
-
21-09-2019 - |
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?
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"