window.pipedriveLeadboosterConfig = { base : 'leadbooster-chat.pipedrive.com', companyId : 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version : 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster existe déjà') } 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 }) }, } } })() Interface d'interrogation des enregistrements actifs - The Codest
The Codest
  • A propos de nous
  • Services
    • Développement de logiciels
      • Développement frontal
      • Développement backend
    • Staff Augmentation
      • Développeurs frontaux
      • Développeurs backend
      • Ingénieurs des données
      • Ingénieurs en informatique dématérialisée
      • Ingénieurs AQ
      • Autres
    • Conseil consultatif
      • Audit et conseil
  • Industries
    • Fintech et banque
    • E-commerce
    • Adtech
    • Santé (Healthtech)
    • Fabrication
    • Logistique
    • Automobile
    • IOT
  • Valeur pour
    • CEO
    • CTO
    • Gestionnaire des livraisons
  • Notre équipe
  • Études de cas
  • Savoir comment
    • Blog
    • Rencontres
    • Webinaires
    • Ressources
Carrières Prendre contact
  • A propos de nous
  • Services
    • Développement de logiciels
      • Développement frontal
      • Développement backend
    • Staff Augmentation
      • Développeurs frontaux
      • Développeurs backend
      • Ingénieurs des données
      • Ingénieurs en informatique dématérialisée
      • Ingénieurs AQ
      • Autres
    • Conseil consultatif
      • Audit et conseil
  • Valeur pour
    • CEO
    • CTO
    • Gestionnaire des livraisons
  • Notre équipe
  • Études de cas
  • Savoir comment
    • Blog
    • Rencontres
    • Webinaires
    • Ressources
Carrières Prendre contact
Flèche arrière RETOUR
2020-06-03
Développement de logiciels

Interface d'interrogation des enregistrements actifs

Marta Polec

La performance est l'un des aspects les plus importants à prendre en compte lors du développement d'applications web. L'analyse de la manière dont les données sont extraites d'une base de données est un bon point de départ pour rechercher des améliorations. Dans cet article, vous trouverez des exemples sur la manière d'améliorer les performances en utilisant des fonctions agrégées et en filtrant les données au niveau de la base de données.

Un peu de contexte pour commencer

Cet article s'inspire d'un problème réel que j'ai eu à résoudre. La résolution de ce problème m'a beaucoup appris, et je l'ai toujours en tête comme référence. Je pense que les exemples sont une bonne ressource d'apprentissage, ils peuvent clarifier beaucoup de choses. Dans cet article, j'aimerais partager avec vous quelques exemples d'utilisation des méthodes de requête Active Record.

Afin de ne pas introduire de détails spécifiques au domaine, j'utiliserai un exemple d'application pour une bibliothèque afin d'illustrer les exemples. Tout est assez simple, comme le montre le diagramme ci-dessous. Nous avons quatre tables : auteurs, livres, utilisateurs et locations. Un utilisateur peut emprunter plusieurs livres et un livre peut être emprunté par plusieurs utilisateurs, nous avons donc besoin d'une table de jonction pour modéliser les relations de plusieurs à plusieurs. Dans notre cas, il s'agit de la table des locations. Nous y stockons également des informations supplémentaires, à savoir les dates d'emprunt et de retour. Un auteur peut avoir plusieurs livres à son nom. Un livre possède également un attribut définissant son genre.

Statistiques de lecture des utilisateurs

La tâche consistait à préparer des statistiques pour un utilisateur unique, afin de pouvoir déterminer le nombre de livres de chaque genre qui ont été empruntés. Ma première idée a été de récupérer tous les livres qui ont été empruntés par l'utilisateur, de les regrouper par genre et ensuite de faire le mapping, de sorte que chaque genre ait un nombre de livres assignés au lieu d'une liste. Voici ce que j'ai trouvé :

Hash[Book.joins(:locations).where(locations : { user : user }).group_by(&:genre).map { |genre, livres| [genre, livres.taille] }]

Bien que cette approche fonctionne et ait l'air propre, elle n'utilise pas toutes les possibilités offertes par les méthodes de requête d'Active Record. Grâce à elles, nous sommes en mesure de filtrer et d'agréger des données au niveau de la base de données sans utiliser le langage SQL brut directement dans notre formulaire de demande d'information. code. Le fait d'opérer au niveau de la db accroît également notre efficacité.

Dans l'exemple ci-dessus, nous pouvons utiliser la méthode group au lieu de la méthode group de Rubypar méthode. Il appliquera le GROUPEBY à la requête tSQL. En outre, la méthode de mappage et de taille peut être remplacée par une fonction d'agrégation de comptage. Au final, nous nous retrouvons avec une requête qui ressemble à ceci :

Book.joins(:locations).where(locations : { user : user }).group(:genre).count(:livres)

Cela semble encore plus simple !

Autres exemples utiles

Vous trouverez ci-dessous d'autres façons d'utiliser les méthodes d'interrogation que je trouve intéressantes à connaître.

Invitation pour les utilisateurs inactifs

TÂCHE : Filtrer les utilisateurs qui n'ont jamais emprunté de livre ou qui l'ont fait il y a plus d'un an.

Nous pourrions récupérer tous les utilisateurs en incluant les locations associées, puis les filtrer à l'aide de la méthode select.

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

Mais, bien sûr, il n'est pas nécessaire de tout récupérer. En utilisant les méthodes de requête, nous pouvons filtrer au niveau de la base de données. Tout d'abord, sélectionnons les utilisateurs qui ont emprunté des livres au cours de l'année écoulée et excluons-les de la sélection finale.

Voici à quoi ressemblera la sous-requête :

User.joins(:rentals).where(rentals : { start_date : (Date.today - 1.year).Date.today })

Et maintenant, mettons tout cela ensemble :

User.where.not(id : [User.joins(:rentals).where(rentals : { start_date : (Date.today - 1.year)..Date.today })])

Auteurs sous-représentés

TÂCHE : Obtenir des auteurs ayant un ou zéro livre emprunté

Le faire avec la méthode select est très simple, mais encore une fois, il n'est pas nécessaire d'opérer sur un tel ensemble de données puisque la base de données peut les filtrer pour nous :

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

Ensuite, il est facile et rapide de filtrer les auteurs qui n'ont aucun livre attribué :

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

Il est important de se souvenir d'une chose lors de l'utilisation des jointures gauches (et des jointures externes en général). S'il y a des enregistrements dans la table de gauche (ici : auteurs) qui n'ont pas d'enregistrements correspondants dans la table de droite (ici : livres), alors les colonnes de la table de droite seront remplies avec des valeurs nulles.

Comme nous avons également besoin d'auteurs ayant un livre attribué dans le système, il y a quelques opérations supplémentaires à effectuer. Nous devrons procéder au regroupement, au comptage et à l'ajout d'une condition. Voici comment assembler le tout :

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

La condition vient après la fonction d'agrégation, nous devons donc utiliser la clause HAVING au lieu de la clause WHERE pour la spécifier.

Les méthodes d'interrogation d'Active Record méritent d'être vérifiées lorsque l'on pense aux performances d'une application. Elles peuvent simplifier votre code et le rendre plus rapide. J'espère que les exemples présentés vous aideront à explorer les possibilités offertes par les méthodes de requête.

En savoir plus :

– L'heure d'une nouvelle réalité a sonné. L'ère du travail à distance a commencé il y a un mois

– Vous avez besoin d'utiliser les frameworks JS les plus courants dans votre application Rails ? Stimulus.js peut être une alternative.

– Développement d'applications web : Pourquoi la technologie Ruby on Rails vaut-elle la peine d'être choisie ?

Articles connexes

Développement de logiciels

Construire des applications web à l'épreuve du temps : les conseils de l'équipe d'experts de The Codest

Découvrez comment The Codest excelle dans la création d'applications web évolutives et interactives à l'aide de technologies de pointe, offrant une expérience utilisateur transparente sur toutes les plateformes. Découvrez comment notre expertise favorise la transformation numérique et la...

LE CODEST
Développement de logiciels

Les 10 premières entreprises de développement de logiciels basées en Lettonie

Découvrez les principales sociétés de développement de logiciels en Lettonie et leurs solutions innovantes dans notre dernier article. Découvrez comment ces leaders de la technologie peuvent vous aider à développer votre entreprise.

thecodest
Solutions pour les entreprises et les grandes entreprises

L'essentiel du développement de logiciels Java : Un guide pour une externalisation réussie

Explorez ce guide essentiel sur le développement réussi de logiciels Java outsourcing pour améliorer l'efficacité, accéder à l'expertise et assurer la réussite des projets avec The Codest.

thecodest
Développement de logiciels

Le guide ultime de l'externalisation en Pologne

L'essor de outsourcing en Pologne est dû aux progrès économiques, éducatifs et technologiques, qui favorisent la croissance des technologies de l'information et un climat propice aux entreprises.

TheCodest
Solutions pour les entreprises et les grandes entreprises

Le guide complet des outils et techniques d'audit informatique

Les audits informatiques garantissent la sécurité, l'efficacité et la conformité des systèmes. Pour en savoir plus sur leur importance, lisez l'article complet.

The Codest
Jakub Jakubowicz CTO & Co-Fondateur

Abonnez-vous à notre base de connaissances et restez au courant de l'expertise du secteur des technologies de l'information.

    A propos de nous

    The Codest - Entreprise internationale de développement de logiciels avec des centres technologiques en Pologne.

    Royaume-Uni - Siège

    • Bureau 303B, 182-184 High Street North E6 2JA
      Londres, Angleterre

    Pologne - Les pôles technologiques locaux

    • Parc de bureaux Fabryczna, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsovie, Pologne

      The Codest

    • Accueil
    • A propos de nous
    • Services
    • Études de cas
    • Savoir comment
    • Carrières
    • Dictionnaire

      Services

    • Conseil consultatif
    • Développement de logiciels
    • Développement backend
    • Développement frontal
    • Staff Augmentation
    • Développeurs backend
    • Ingénieurs en informatique dématérialisée
    • Ingénieurs des données
    • Autres
    • Ingénieurs AQ

      Ressources

    • Faits et mythes concernant la coopération avec un partenaire externe de développement de logiciels
    • Des États-Unis à l'Europe : Pourquoi les startups américaines décident-elles de se délocaliser en Europe ?
    • Comparaison des pôles de développement Tech Offshore : Tech Offshore Europe (Pologne), ASEAN (Philippines), Eurasie (Turquie)
    • Quels sont les principaux défis des CTO et des DSI ?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Conditions d'utilisation du site web

    Copyright © 2025 par The Codest. Tous droits réservés.

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