2010-09-09 2 views
1

que je dois faire ce qui suit:Recueillir de nombreux «comptes» dans une requête?

<% for customer in @customers do %> 
    <%= customer.orders.count %> 
<% end %> 

Cette souches du serveur, la création de requêtes n, où n = nombre de clients.

Comment puis-je charger ces comptes avec mes clients dans une requête? Merci.

Répondre

2

Vous pouvez utiliser une hâte rejoindre:

@customers = Customers.paginate :page => 1, :per_page => 20, :include => [:orders] 

En spécifiant le: paramètre include à la jointure, les commandes seront pré-chargés, ce qui empêche le problème n + 1. Vous pouvez ensuite utiliser customer.orders.length.

Si le chargement de toutes ces commandes nécessite trop de mémoire, explorez counter_cache. Il est conçu pour tenir un compte d'un modèle sur un modèle associé:

class Order 
    belongs_to :customer, :counter_cache => true 
end 

Cela augmenter et diminuer un champ orders_count sur la possession customer enregistrement lorsque les commandes sont ajoutés ou retirés de la associaition.

Si vous ne voulez pas utiliser counter_cache, vous avez besoin d'un outil de recherche personnalisé qui joint la table orders et les groupes sur orders.customer_id, puis sélectionne le compte comme champ supplémentaire. Cela ne fonctionnera pas aussi bien que le cache du compteur, cependant.

Questions connexes