En Rails los scopes del activerecord son métodos de clases, pero tienen una ventaja, siempre devuelven una relación y por lo mismo siempre son concatenables (Chainables).

Ejemplo de filtro implementado sobre scope vs método de clase (no hay que agregar ambos, basta con sólo una de las implementaciones)

Cuidado de omitir el operador lambda

Hay que tener cuidado al momento definir los scopes, en ellos siempre deberíamos utilizar el operador lambda (->) de forma de evitar que el método sea evaluado la primera vez que se cargue la clase, esto puede traer problemas a la hora de realizar migraciones o cualquier operación que requiera a los modelos y utilice scopes sobre campos que todavía no existen en el schema.

El siguiente artículo aborda muy bien el tema, recomiendo leerlo.
Rails scopes vs class methods

y si todavía no estas muy familiarizado con el término lambda, te recomiendo este otro que te ayudará a entender los blocks, procs y lambdas

Ruby Explained: Blocks, Procs, and Lambdas, aka «Closures»

 

Share Button