I'm new to the new ActiveRecord query interface, so I'm still good at it.
I was hoping someone could explain the difference between using scope in an ActiveRecord model and just using a class method (i.e. self.some_method )
From what I can compile, it is always expected that the scope returns a relation, whereas the class method does not have to. It's true?
For example, I thought it made sense to do something like:
class Person scope :grouped_counts, group(:name).count end
But that does not work. I get this error:
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
However, it works as a class method
def self.grouped_counts group(:name).count end
I am interested in knowing people's thoughts about when to use areas and when to use class methods. Am I right in assuming that a scope should always return a relation, but a class method can return what it wants?
activerecord ruby-on-rails-3 class-method scopes
brad May 05 '11 at 14:50 2011-05-05 14:50
source share