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