¿Los ámbitos solo tienen sintaxis de azúcar, o hay alguna ventaja real en su uso frente a los métodos de clase?Ámbitos vs métodos de clase en Rails 3
Un ejemplo simple sería el siguiente. Son intercambiables, por lo que yo sé.
scope :without_parent, where(:parent_id => nil)
# OR
def self.without_parent
self.where(:parent_id => nil)
end
¿Para qué es cada técnica más adecuada?
EDITAR
named_scope.rb menciona lo siguiente (como se señala más adelante por goncalossilva):
Línea 54:
Tenga en cuenta que esto es simplemente 'sintáctica azúcar' para definir una clase real método
Línea 113:
ámbitos nombrados también pueden tener extensiones, al igual que con las declaraciones has_many:
class Shirt < ActiveRecord::Base
scope :red, where(:color => 'red') do
def dom_id
'red_shirts'
end
end
end
El problema con los ámbitos es que a veces pueden llenar la parte superior del modelo. Estoy bastante seguro de que son solo azúcar sintáctica. Con los rieles 3 cargando flojamente, no hay ninguna razón por la que no puedas usar un método de clase como dijiste. En este punto, realmente se trata de una cuestión de preferencia. – agmcleod
Platsformatec tiene una muy buena comparación en http://blog.plataformatec.com.br/2013/02/active-record-scopes-vs-class-methods/ – caspyin