2010-09-15 3 views
0

J'ai un modèle où un article peut avoir plusieurs étiquettes (et un tag plusieurs articles). L'article a deux sous-classes, produit et kit. Les produits ont une catégorie, les kits ne l'ont pas.requête arel complexe

Comment puis-je obtenir tous les articles (kits et produits) d'une étiquette (je connais le tag.id), avec la catégorie du produit chargée (éviter un n + 1)?

Répondre

0

En supposant que vos associations sont déjà configurées (c'est-à-dire tag has_many: articles via articles_tags, etc.), si vous utilisez Rails 3, vous pouvez utiliser #includes lorsque vous faites votre recherche. Déplacez votre belongs_to: catégorie à votre classe article (oui, il est sémantiquement correct de le faire), puis:

@tag = Tag.first 
@tag.articles.includes(:category) 

devrait fonctionner.

http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations

+0

Malheureusement, il ne fonctionne pas. L'association nommée "catégories" n'a pas été trouvée. peut-être l'avez-vous mal orthographié? Les articles n'ont aucune catégorie, seuls les produits le font. – Jan

+0

ah, je vois, vous mettez d'abord les catégories dans les articles, mais ce serait sémantiquement correct, mais pas domaine sage. Les kits se composent de plusieurs articles, qui peuvent avoir différentes catégories en retour. – Jan

+0

Pouvez-vous poster votre code de modèle pour l'article, le produit et le kit? – jenjenut233