предупреждение при использовании именованной области как части анонимной области
-
21-09-2019 - |
Вопрос
У меня есть следующая именованная область:
named_scope :find_all_that_match_tag, lambda { |tags| {
:select => "articles.id, tags.name",
:joins => :tags,
:conditions => ["tags.name IN (?)",tags]}
}
Это отлично работает в скрипте/консоли
Article.find_all_that_match_tag(["cooking"])
Но если я использую это вот так, как часть анонимной области действия
scope = Article.scoped({})
scope = scope.scoped.find_all_that_match_tag(["cooking"])
я получаю предупреждение во второй строке:
/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
Это все еще работает, но что вызывает предупреждение?и как мне от этого избавиться, пожалуйста?
Решение
Прежде всего, я бы, вероятно, не стал включать анонимную область без условий.
Тем не менее, я думаю, что предупреждение заключается в вызове области видимости как части цепочки без аргументов.В этом нет необходимости, у вас есть именованная область «find_all_that_match», которую вы сможете просто связать с любыми предыдущими областями, анонимными или именованными.
scope = Article.scoped({})
scope.find_all_that_match_tag(["cooking"])
Возможно, также стоит использовать более короткую именованную область, например «tagged_as» или просто «tagged».