Рельсы получают все предметы из всех заказов - PullRequest
2 голосов
/ 27 марта 2011

@orders.closed_today - это массив всех ордеров, закрытых на сегодня.

Как мне получить список всех позиций для этого?

т.е. @items = @orders.closed_today.items


Обновление отчетов html

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

Элементы модели

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

1 Ответ

1 голос
/ 27 марта 2011

Простой: сопоставление предметов.

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

Это даст вам:

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

Чтобы получить уникальные предметы:

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

Это не устойчивый способ получения связанных объектов; Остерегайтесь проблем с производительностью N + 1.

В целом, вы, вероятно, должны сделать что-то вроде этого:

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

и просто позвоните:

Item.closed_today
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...