Named_scope pour les performances

Quand on développe des applications web avec RubyOnRails le problème des performances se pose tôt où tard (d'ailleur souvent trop tard).

Par exemple on veut connaitre la liste des produits d'un famille :

Controller :
@family = Family.find(params:id)

Dans la vue :
<% @family.products.each do |p| %>
<%= p.picture.path %>
<% end %>

Et là vous regardez les requêtes au serveur : (2 * @family.products.count) requêtes !

C'est pour ça qu'existe l'option :include dans la méthode find, elle met en cache les objets en relation qui sont spécifiés.

Exemple dans le controller @family = Family.find(params:id, :include => {:products => :picture} )

Et là 1 requête.

Et l'avantage, parce que j'ai eu ce problème, c'est qu'on peut utiliser les named_scope :

named_scope :include_products, :include => {:products => :picture}

Du coup dans le controller :
@family = Family.include_products.find(params:id)

Du coup là c'est nettement plus performant !