2011-03-27 6 views
2

@orders.closed_today est un tableau de toutes les commandes fermées pour aujourd'hui.Rails obtenir tous les articles de toutes les commandes

Comment puis-je obtenir tous les articles pour cela?

à savoir @items = @orders.closed_today.items


Mise à jour Rapports html

<% @items = Item.in_orders(@orders.closed_today) %> 

Articles modèle

scope :in_orders, lambda { |orders| where('order_id is in (?)', orders.map(&:id).join(',')) } 

Répondre

1

simple: carte les articles.

@items = @orders.closed_today.all(:include => :items).map(&:items) 

Cela vous donnera:

=> [[item1,item2],[item2,item3]] 

Pour obtenir des objets uniques:

@orders.closed_today.all(:include => :items).map(&:items).flatten.uniq 

Ce n'est pas une manière durable d'aller chercher des objets connexes; méfiez-vous des problèmes de performance N + 1.

Plus généralement, vous devriez probablement faire quelque chose comme ceci:

class Item 
    scope :closed_today, joins(:orders) & Order.closed_today 
end 

et il suffit d'appeler:

Item.closed_today 
+0

Ce genre de travaillé. Besoin de résultats aplatis à un seul []. Quelque chose dans la ligne de http://stackoverflow.com/questions/4307411/not-in-rails où je peux chercher si un Item.order_id est dans le @ orders.closed_today. Lorsque essayé réponse dans le lien a une SQLite3 :: SQLException: près de "in": erreur de syntaxe: Question mise à jour pour montrer ce que j'ai essayé. – pcasa

+0

Étendue ajoutée sur Item utilisant scope sur Order; c'est plus ce que tu cherchais, n'est-ce pas? – 20man

+0

A changé votre portée en lambda pour être flexible avec les plages de dates. Merci! – pcasa

Questions connexes