Я новичок в новом интерфейсе запросов ActiveRecord, поэтому я все еще разбираюсь.
Я надеялся, что кто-то может объяснить разницу между использованием scope
в модели ActiveRecord и просто использованием метода класса (т.е. self.some_method
)
Из того, что я могу собрать, всегда ожидается, что область видимости возвращает отношение, тогда как метод класса необязательно должен. Это правда?
Например, я подумал, что имеет смысл сделать что-то вроде:
class Person
scope :grouped_counts, group(:name).count
end
Но это не работает. Я получаю эту ошибку:
ArgumentError: Unknown key(s): communicating, failed, matched, unmatched
from /Users/bradrobertson/.rvm/gems/[email protected]/gems/activesupport-3.0.5/lib/active_support/core_ext/hash/keys.rb:43:in `assert_valid_keys'
from /Users/bradrobertson/.rvm/gems/[email protected]/gems/activerecord-3.0.5/lib/active_record/relation/spawn_methods.rb:110:in `apply_finder_options'
from /Users/bradrobertson/.rvm/gems/[email protected]/gems/activerecord-3.0.5/lib/active_record/named_scope.rb:110:in `block in scope'
from (irb):48
from /Users/bradrobertson/.rvm/gems/[email protected]/gems/railties-3.0.5/lib/rails/commands/console.rb:44:in `start'
from /Users/bradrobertson/.rvm/gems/[email protected]/gems/railties-3.0.5/lib/rails/commands/console.rb:8:in `start'
from /Users/bradrobertson/.rvm/gems/[email protected]/gems/railties-3.0.5/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
r
Однако он работает как метод класса
def self.grouped_counts
group(:name).count
end
Мне интересно знать мысли людей о том, когда использовать области и когда использовать методы класса. Правильно ли я предполагаю, что область должна всегда возвращать отношение, но метод класса может возвращать то, что он хочет?