ActiveRecord Rails 3 область видимости и метод класса

Я новичок в новом интерфейсе запросов ActiveRecord, поэтому я все еще разбираюсь.

Я надеялся, что кто-нибудь сможет объяснить разницу между использованием области в модели 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/ruby-1.9.2-p180@influitive/gems/activesupport-3.0.5/lib/active_support/core_ext/hash/keys.rb:43:in `assert_valid_keys'
    from /Users/bradrobertson/.rvm/gems/ruby-1.9.2-p180@influitive/gems/activerecord-3.0.5/lib/active_record/relation/spawn_methods.rb:110:in `apply_finder_options'
    from /Users/bradrobertson/.rvm/gems/ruby-1.9.2-p180@influitive/gems/activerecord-3.0.5/lib/active_record/named_scope.rb:110:in `block in scope'
    from (irb):48
    from /Users/bradrobertson/.rvm/gems/ruby-1.9.2-p180@influitive/gems/railties-3.0.5/lib/rails/commands/console.rb:44:in `start'
    from /Users/bradrobertson/.rvm/gems/ruby-1.9.2-p180@influitive/gems/railties-3.0.5/lib/rails/commands/console.rb:8:in `start'
    from /Users/bradrobertson/.rvm/gems/ruby-1.9.2-p180@influitive/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

Мне интересно узнать мнение людей о том, когда использовать области действия, а когда методы класса. Правильно ли я предполагаю, что область видимости всегда должна возвращать отношение, но метод класса может возвращать все, что захочет?

50
задан brad 5 May 2011 в 03:50
поделиться