Soy nuevo en la nueva interfaz de consulta de ActiveRecord, así que todavía estoy averiguando cosas.ActiveRecord Rails 3 scope vs class method
Tenía la esperanza de que alguien podría explicar la diferencia entre usar una scope
en un modelo ActiveRecord y simplemente utilizando un método de clase (es decir self.some_method
)
De lo que he entendido, un ámbito siempre se espera que regrese una relación, mientras que un método de clase no necesariamente tiene que hacerlo. ¿Es esto cierto?
Por ejemplo, pensé que tendría sentido hacer algo como:
class Person
scope :grouped_counts, group(:name).count
end
Pero esto no funciona. Me sale este error:
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
Sin embargo, sí funcionan como un método de clase
def self.grouped_counts
group(:name).count
end
me interesa conocer los pensamientos de la gente sobre cuándo utilizar alcances y cuándo usar métodos de clase. ¿Estoy en lo cierto al suponer que un ámbito siempre debe devolver una relación, pero un método de clase puede devolver lo que quiera?
genial, gracias por la entrada! – brad
Excelente respuesta. Vea también este artículo: [Los ámbitos nombrados están muertos] (http: //www.railway.at/2010/03/09/named-scopes-are-dead /) – mjnissim