Desafío Latam
Uncategorized

Rails scopes V.S Métodos de clase

reticle 17 ts

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)

class Post < ActiveRecord::Base   scope :by_status, -> status { where(status: status) }

  def self.by_status(status)
    where(status: status)
  end
end

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»

 

Artículos relacionados

Lenguajes de programación: Roadmap de l@s novat@s

Tomás Hurtado
3 años ago

Capacitación: Motor para diferenciarse y para retener a tu talento.

Giovanni Patrone
3 años ago

Trabajar desde tu casa v/s un Coworking space

Romina Díaz
9 años ago
Salir de la versión móvil