Rails从所有订单中获取所有项目

时间:2011-03-27 19:38:22

标签: ruby-on-rails ruby-on-rails-3

@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 个答案:

答案 0 :(得分:1)

简单:映射项目。

@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