En esta página:
Ruby on Rails es un genial framework, cuenta con muchas alternativas, herramientas, utilidades, etc. que ayudan al desarrollador a ser más productivo, una de estas alternativas son los Scopes que traducido al español significa Ámbitos o Alcances y en este Post vamos a conocer más acerca de esta importante alternativa en Ruby on Rails.
Antes de continuar, te invito a leer los siguientes artículos:
Si ya lo conoces o eres usuario avanzado de Ruby on Rails, puedes continuar, no hay problema.
Asimismo te invito a escuchar el Podcast: “Donde buscar ayuda sobre Programación”:
Bien ahora continuemos con el Post: Como usar Scopes en Ruby on Rails.
Los Scopes en Ruby on Rails son consultas personalizadas que el Desarrollador define dentro de sus modelos con el método scope.
Usando Scopes en Ruby on Rails
Cada Scope toma 2 argumentos, un nombre que utiliza para llamar a este Scope en el código y un lambda que implementa la consulta.
1 2 3 4 5 |
class Producto < ApplicationRecord scope :stock, -> { where("stock > 0") } end |
Como resultado de llamar a un scope, se obtiene un objeto ActiveRecord::Relation, por ende podemos encadenar y combinar scopes.
1 2 3 |
Producto.stock.en_oferta.first(10) |
Hemos combinado el scope stock y en_oferta, aún podemos aprender más cosas sobre los scopes en Ruby on Rails.
Cuando debemos usar los Scopes ?
Los scopes son interesantes y tienen un uso particular, veamos a continuación el siguiente ejemplo:
1 2 3 4 5 |
def index @productos = Producto.where("LENGTH(nombre) > 15") end |
En el código anterior tenemos una acción index en un controlador que intenta mostrar productos con un nombre de más de 15 caracteres.
Pero si deseas usar esta consulta en otro lugar, puede que tengas que duplicar el código, por ende tendrás código repetitivo, entonces veamos como hacer esta consulta usando un scope, veamos el siguiente ejemplo:
1 2 3 4 5 |
class Producto scope :con_nombre_largo, -> { where("LENGTH(nombre) > 15") } end |
Ahora nuestra acción en el controlador se ve de la siguiente manera:
1 2 3 4 5 |
def index @productos = Producto.con_nombre_largo end |
Hacemos uso del scope con_nombre_largo, entonces podemos hace uso de Scopes para evitar tener que escribir todo el código, así evitamos duplicar el código.
Usando Scopes con Argumentos
Si deseas pasar una variable que podría ser un argumento a un Scope puedes hacerlo de la siguiente manera:
1 2 3 4 5 |
class Producto scope :con_nombre_largo, ->(length) { where("LENGTH(nombre) > ?", length) } end |
En el código anterior el signo de interrogación ‘?‘ es un marcador de posición, se reemplazará por el valor de length.
Y si deseas usar un valor predeterminado, puedes hacerlo de la siguiente manera:
1 2 3 4 5 |
class Producto scope :con_nombre_largo, ->(length = 15) { where("LENGTH(nombre) > ?", length) } end |
En el código anterior he definido 15 como el valor predeterminado.
Conclusión
En este Post hemos aprendido a usar los scopes en Ruby on Rails y los llegarás a dominar conforme los pongas en práctica en tus proyectos.
Nota(s)
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.