2009-08-25 6 views
0

Dites que j'ai un modèle de poste et de catégorie, avec chaque article appartenant à une catégorie. Sur à peu près toutes les pages, je reçois la liste des catégories:Rails: suppression des requêtes de base de données inutiles

@categories = Category.all 

Cela produit un tableau d'objets de catégorie. Maintenant, dites que chaque catégorie a des attributs d'identifiant et de nom. Lorsque vous consultez un post, je souhaite afficher le nom de la catégorie.

Je recevais à l'origine le nom de la catégorie en faisant quelque chose comme ceci:

@post = Post.find(params[:id], :include => :category) 

Cependant, je me rends compte que je l'ai déjà le tableau @categories. Il semble inutile de: inclure quand j'ai déjà une liste de catégories. Donc, à la place, j'effectue maintenant une recherche sur le tableau:

category = @categories.find { |category| @post.category_id == category.id }.name 

Cela fonctionne et réduit le nombre de requêtes. Ma question est de savoir si c'est la meilleure façon d'aborder la réduction du nombre de requêtes (sans mise en cache)?

Répondre

2

C'est parfaitement logique.

Le seul risque (et c'est un minuscule) est que vous soyez probablement soumis à une condition de concurrence. Par exemple, quelqu'un pourrait changer la catégorie de la publication après avoir récupéré la liste des catégories, ou pourrait mettre à jour la liste des catégories, et ce que vous montrez ne serait plus correct. Par la suite, s'ils cliquaient sur un nom de catégorie pour obtenir une liste de tous les articles de cette catégorie, ils recevraient probablement une erreur à moins que vous ne traitiez ce genre de chose.

IMO, c'est un très petit prix à payer, cependant.

+0

bon point. unf. pas de votes à gauche :) –

1

Le seul problème ici serait lorsque vous décidez que vous n'avez plus besoin de la liste des catégories et essayez de le supprimer.

Sinon, vous avez une bonne solution.

0

Et si vous avez un grand nombre de catégories? Allez-vous toujours les chercher tous? Faire un :include est beaucoup mieux que SQL va toujours gagner sur Ruby.

+0

Je ne prévois qu'un maximum de dire ... 20 catégories. J'ai toujours besoin d'aller chercher ces catégories. – Homar

Questions connexes