Scopes en Ruby on Rails

Los Scopes (alcance, ámbito) son condiciones que se aplican en el modelo para definir diferentes grupos de registros que hay en las tablas.

Las consultas no pertenecen al controlador, pertenecen al modelo.

 

Si la hacemos en el controlador, deberíamos implementarla en todos los controladores y en cada metodo que nos haga falta, En cambio si la realizamos en el modelo, solamente la declararíamos en un solo sitio, llamandola las veces que haga falta desde distintos controladores.

 

Se pueden crear con métodos de clase o con scope, es exactamente lo mismo:

Método de Clase:

def self.publicados
  Article.where(state:"published")
end

Scope:

scope :publicados, -> { where(state:"published") }

 

Los scopes pueden ser encadenados. Por ejemplo:

Article.publicados.ultimos