window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versión: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster ya existe') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Interfaz de consulta de registros activos - The Codest
The Codest
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Industrias
    • Fintech y Banca
    • E-commerce
    • Adtech
    • Tecnología sanitaria
    • Fabricación
    • Logística
    • Automoción
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
Flecha atrás VOLVER
2020-06-03
Desarrollo de software

Interfaz de consulta de registros activos

Marta Polec

El rendimiento es uno de los aspectos más importantes a tener en cuenta cuando se desarrollan aplicaciones web. Analizar cómo se obtienen los datos de una base de datos es un buen punto de partida a la hora de buscar mejoras. En este artículo, encontrarás ejemplos sobre cómo mejorar el rendimiento utilizando funciones agregadas y filtrando datos a nivel de base de datos.

Un poco de contexto para empezar

Este artículo está inspirado en un problema real que se me planteó una vez. Resolverlo me enseñó mucho, y aún lo tengo como referencia en mi mente. Creo que los ejemplos son un buen recurso de aprendizaje, pueden aclarar muchas cosas. En este artículo, me gustaría compartir contigo algunos ejemplos de uso de los métodos de consulta de Active Record.

Para no introducir detalles específicos del dominio, utilizaré una aplicación de ejemplo de una biblioteca para ilustrar los ejemplos. Todo es bastante sencillo, como se muestra en el diagrama siguiente. Tenemos cuatro tablas: autores, libros, usuarios y alquileres. Un usuario puede tomar prestados muchos libros y un libro puede ser tomado prestado por muchos usuarios, por lo que necesitamos una tabla de unión para modelar las relaciones de muchos a muchos. En nuestro caso, es la tabla de alquileres. También almacenamos información adicional, como las fechas de préstamo y devolución. Un autor puede tener muchos libros asignados a su nombre. Un libro también tiene un atributo que define su género.

Estadísticas de lectura de los usuarios

La tarea consistía en preparar estadísticas para un único usuario, de modo que pudiéramos saber cuántos libros de cada género se habían prestado. Lo primero que se me ocurrió fue obtener todos los libros prestados por el usuario, agruparlos por géneros y luego hacer el mapeo, de forma que cada género tuviera asignado un número de libros en lugar de una lista. Esto es lo que se me ocurrió:

Hash[Book.joins(:alquileres).where(alquileres: { usuario: usuario }).group_by(&:género).map { |género, libros| [género, libros.tamaño] }]

Aunque este enfoque funciona y tiene un aspecto limpio, no utiliza todas las posibilidades que ofrecen los métodos de consulta de Active Record. Gracias a ellos, podemos filtrar y agregar datos a nivel de base de datos sin utilizar SQL sin procesar directamente en nuestra aplicación. código. Operar a nivel db también aumenta nuestra eficacia.

En el ejemplo anterior, podemos utilizar el método group en lugar del grupo de Rubypor método. Se aplicará el GRUPOBY a la consulta tSQL. Además, el método de asignación y tamaño puede sustituirse por una función de agregación de recuento. Al final, nos queda una consulta con el siguiente aspecto:

Book.joins(:alquileres).where(alquileres: { usuario: usuario }).group(:género).count(:libros)

¡Parece aún más sencillo!

Otros ejemplos útiles

A continuación encontrarás otras formas de utilizar los métodos de consulta que considero que merece la pena conocer.

Invitación para usuarios inactivos

TAREA: Filtrar los usuarios que nunca han prestado un libro o lo hicieron hace más de un año.

Podríamos obtener todos los usuarios incluyendo los alquileres asociados y luego filtrarlos utilizando el método select.

User.includes(:alquileres).select do |usuario|
 user.rentals.empty? || user.rentals.none? { |rental| rental.start_date >= Date.today - 1.year }
end 

Pero, por supuesto, no hay necesidad de obtener todo. Utilizando los métodos de consulta, podemos filtrarlo a nivel de base de datos. En primer lugar, vamos a seleccionar los usuarios que han prestado algunos libros en el último año y luego excluirlos de la selección final.

Este es el aspecto que tendrá la subconsulta:

User.joins(:alquileres).where(alquileres: { fecha_inicio: (Fecha.hoy - 1.año).Fecha.hoy })

Y ahora, juntémoslo todo:

Usuario.where.not(id: [User.joins(:alquileres).where(alquileres: { fecha_inicio: (fecha.hoy - 1.año)..fecha.hoy })])

Autores infrarrepresentados

TAREA: Conseguir autores con uno o cero libros prestados

Hacerlo con el método select es super sencillo, pero de nuevo - no hay necesidad de operar sobre un conjunto tan grande de datos ya que la db puede filtrarlos por nosotros:

Author.includes(:books).select { |author| author.books.size <= 1 }

A continuación, filtrar los autores con cero libros asignados es rápido y sencillo:

Author.left_joins(:books).where(books: { id: nil })

Es importante recordar una cosa al utilizar left_joins (y outer joins en general). Si hay registros en la tabla izquierda (aquí: autores) que no tienen registros correspondientes en la tabla derecha (aquí: libros), las columnas de la tabla derecha se rellenarán con valores nulos.

Como también necesitamos autores con un libro asignado en el sistema, hay que hacer algunas operaciones más. Tendremos que agrupar, contar y añadir una condición. A continuación te explicamos cómo montarlo todo:

Author.left_joins(:libros).group(:id).having("count(*) <= ?", 1)

La condición viene después de la función de agregación, por lo que tenemos que utilizar la cláusula HAVING, en lugar de la cláusula WHERE para especificarla.

Merece la pena comprobar los métodos de consulta de Active Record cuando se piensa en el rendimiento de la aplicación. Pueden simplificar tu código y hacer que funcione más rápido. Espero que los ejemplos compartidos te ayuden a explorar las posibilidades que ofrecen los métodos de consulta.

Más información:

– Ha llegado la hora de una nueva realidad. Hace un mes comenzó la era del trabajo a distancia

– ¿Necesitas utilizar los frameworks JS habituales en tu aplicación Rails? Stimulus.js puede ser una alternativa

– Desarrollo de aplicaciones web: ¿Por qué merece la pena elegir la tecnología Ruby on Rails?

Artículos relacionados

Desarrollo de software

Crear aplicaciones web preparadas para el futuro: ideas del equipo de expertos de The Codest

Descubra cómo The Codest destaca en la creación de aplicaciones web escalables e interactivas con tecnologías de vanguardia, ofreciendo experiencias de usuario fluidas en todas las plataformas. Descubra cómo nuestra experiencia impulsa la transformación...

EL MEJOR
Desarrollo de software

Las 10 mejores empresas de desarrollo de software de Letonia

Conozca las principales empresas de desarrollo de software de Letonia y sus innovadoras soluciones en nuestro último artículo. Descubra cómo estos líderes tecnológicos pueden ayudarle a mejorar su negocio.

thecodest
Soluciones para empresas y escalas

Fundamentos del desarrollo de software Java: Guía para externalizar con éxito

Explore esta guía esencial sobre el desarrollo de software Java outsourcing con éxito para mejorar la eficiencia, acceder a la experiencia e impulsar el éxito de los proyectos con The Codest.

thecodest
Desarrollo de software

La guía definitiva para subcontratar en Polonia

El auge de las outsourcing en Polonia está impulsado por los avances económicos, educativos y tecnológicos, que fomentan el crecimiento de las TI y un clima favorable a las empresas.

TheCodest
Soluciones para empresas y escalas

Guía completa de herramientas y técnicas de auditoría informática

Las auditorías informáticas garantizan sistemas seguros, eficientes y conformes. Obtenga más información sobre su importancia leyendo el artículo completo.

The Codest
Jakub Jakubowicz CTO y Cofundador

Suscríbase a nuestra base de conocimientos y manténgase al día de la experiencia del sector informático.

    Quiénes somos

    The Codest - Empresa internacional de desarrollo de software con centros tecnológicos en Polonia.

    Reino Unido - Sede central

    • Oficina 303B, 182-184 High Street North E6 2JA
      Londres, Inglaterra

    Polonia - Centros tecnológicos locales

    • Parque de oficinas Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Embajada del Cerebro, Konstruktorska
      11, 02-673 Varsovia, Polonia

      The Codest

    • Inicio
    • Quiénes somos
    • Servicios
    • Case Studies
    • Saber cómo
    • Carreras profesionales
    • Diccionario

      Servicios

    • Asesoramiento
    • Desarrollo de software
    • Desarrollo backend
    • Desarrollo Frontend
    • Staff Augmentation
    • Desarrolladores de backend
    • Ingenieros de la nube
    • Ingenieros de datos
    • Otros
    • Ingenieros de control de calidad

      Recursos

    • Hechos y mitos sobre la cooperación con un socio externo de desarrollo de software
    • De EE.UU. a Europa: ¿Por qué las startups estadounidenses deciden trasladarse a Europa?
    • Comparación de los polos de desarrollo de Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filipinas), Eurasia (Turquía)
    • ¿Cuáles son los principales retos de los CTO y los CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condiciones de uso del sitio web

    Copyright © 2025 por The Codest. Todos los derechos reservados.

    es_ESSpanish
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean nl_NLDutch etEstonian elGreek es_ESSpanish