Rails est synonyme de raccourcit, il nous permet par exemple de faire une simple requête DB en une ligne comme ceci:

Model.find(id) ou encore Model.all, Model.first, Model.last
Model.all va générer une requête semblable à cela SELECT * FROM model

Simple non!?
Très! Oui, mais….. Cette requête retourne et met en mémoire toutes les données de la row. A-t-on réellemement besoin de retourner toutes les colonnes?

Il est plus long lors d’une requête de retourner toutes les colonnes que de n’en retourner seulement quelques unes. Bien sur on parle ici de millisecondes, mais sur certains sites, ces millisecondes peuvent s’avérer être précieuse.

Si on veut construire un select plus précis et moins “time consumming” on peut le faire avec la même fonction dans Rails, il suffit de lui passer un seul paramètre comme ceci.

Model.all(:select => ‘model.id, model.firstname, model.lastname’)
génère ceci => SELECT model.id, model.name, model.lastname FROM Model

Cette manière de faire, bien que plus longue à écrire, est à mon avis une bonne pratique à appliquer sur le web. Pourquoi charger des données non utilisées dans un objet alors que nous n’avons besoin que de quelques colonnes!? Je n’en vois pas la raison.

En plus du pratique argument :select, il est possible de passer plusieurs autres d’arguments à la méthode find. En voici une liste:

: order, :from, :conditions, :joins, :group, :limit, : offset, :readonly, :lock et :include.

référence => Railsbrain

Bookmark and Share