d'avertissement lors de l'utilisation d'un named_scope dans le cadre d'une portée anonyme
-
21-09-2019 - |
Question
Je donne les résultats suivants named scope:
named_scope :find_all_that_match_tag, lambda { |tags| {
:select => "articles.id, tags.name",
:joins => :tags,
:conditions => ["tags.name IN (?)",tags]}
}
Il fonctionne très bien comme ça dans le script / console
Article.find_all_that_match_tag(["cooking"])
Mais si je l'utilise comme celui-ci, dans le cadre d'un champ anonyme
scope = Article.scoped({})
scope = scope.scoped.find_all_that_match_tag(["cooking"])
Je reçois un avertissement, sur la deuxième ligne:
/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
Il fonctionne toujours, mais ce qui cause l'avertissement? et comment puis-je me débarrasser de lui s'il vous plaît?
La solution
Tout d'abord je ne reviendrais probablement pas pris la peine, y compris un champ anonyme sans conditions.
Cela dit, je pense que l'avertissement est dans l'appel à portée a été définie dans le cadre de la chaîne sans argument. Il ne devrait pas être nécessaire, vous avez un champ nommé « de find_all_that_match » que vous devriez être en mesure d'enchaîner simplement des champs précédents, anonymes ou nommés.
scope = Article.scoped({})
scope.find_all_that_match_tag(["cooking"])
pourrait également être intéressant d'utiliser une portée plus courte nommée comme « tagged_as » ou simplement « marqués »