Cómo usar los visores nombrados en los rieles

Los visores con nombre son un subconjunto de una colección. Lo ilustraré con un ejemplo. Si usted tiene usuarios y desea encontrar a todos los usuarios que tienen su cuenta confirmada. Esto significa que tendrá algún tipo de columna en su base de datos que represente esto. Supongamos que la columna es

user_confirmed

. Consultaríamos la base de datos sin usar alcances como este:

User.where(user_confirmed:true)

Usar consultas como esta significa que tenemos que repetir este código en todas partes donde queramos recuperar a todos los usuarios confirmados. Esto no nos ayuda a SECAR nuestro código. En lugar de repetir el mismo código todo el tiempo podríamos ir por la ruta del osciloscopio como se muestra a continuación.

#File: user.rbclassUser < ActiveRecord::Base
  alcance :confirmado, ->(){donde(user_confirmed:true)}}
end

Esto nos permite obtener la lista de usuarios confirmados de la siguiente manera:

User.confirmed

Este es un ejemplo muy simple. Los alcances se pueden encadenar para crear consultas complejas. Veamos un ejemplo de encadenamiento del osciloscopio. En este ejemplo, supongamos que desea una consulta para un usuario confirmado con un nombre determinado. El archivo de clase tendrá el siguiente aspecto:

#File: user.rbclassUser < ActiveRecord::Base
  alcance :confirmado, ->(){donde(user_confirmed:true)}}
  alcance :nombre, -> (nombre) { donde(nombre: nombre) }
end

Los alcances definidos arriba serán encadenados de la siguiente manera:

User.confirmed.name(Nonso)

Los osciloscopios están perezosamente cargados. Esto significa que la consulta no se ejecuta hasta que se intenta utilizar el resultado de la consulta. Por ejemplo:

User.confirmed.name(Nonso).upcase

¿Cuál es la diferencia entre los alcances y los métodos de clase? Los alcances se utilizan cuando no se dispone de procesamiento adicional para realizar en los datos recuperados. Si tiene que realizar algún tipo de procesamiento, entonces siga los métodos de la clase, hablaré sobre los métodos de la clase en mi próximo artículo. Scope es una buena utilidad y ayuda a mantener nuestros códigos limpios, legibles y simples.

Etiquetas

Desarrollo de SoftwareLas últimas historias técnicasCodificaciónDesarrolloAprendizajeAprendizaje en CodeRubyContinuar la discusión