私は ActiveRecord の新しいクエリ インターフェイスに慣れていないので、まだいろいろと考えています。
scope
ActiveRecord モデルで a を使用することと、単にクラス メソッドを使用することの違いを誰かが説明してくれることを期待していました (つまり、 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
いつスコープを使用し、いつクラスメソッドを使用するかについて、人々の考えを知りたいです。スコープは常に関係を返さなければならないが、クラスメソッドは必要なものを返すことができると仮定するのは正しいですか?