Rails3帮助连接范围

Rails3帮助连接范围

问题描述:

有简单的订单 - 项目的应用程序。没有购物车。为我的报告需要联合范围的帮助。Rails3帮助连接范围

项目是多态(belongs_to :itemable, :polymorphic => true)与产品,服务和政策。政策属于供应商。

目标是列出供应商卖了多少,但仍然能够使用订单的范围,如下所示。

作用域在我的订单模型

scope :closed_today, lambda { where("closed_date IS NOT ? AND closed_date >= ? AND closed_date < ?", nil, Time.now.midnight, Time.now.midnight.tomorrow)} 
scope :closed_yesterday, lambda { where("closed_date IS NOT ? AND closed_date >= ? AND closed_date < ?", nil, Time.now.midnight.yesterday, Time.now.midnight)} 
... 

喜欢的东西 - 在订单模式猜到的?

scope :with_policies, joins(:items).where(:itemable_type => "Policy") 

和最后的结果是能集团由供应商并获得大量销售。

<% for v in @orders.closed_today.with_policies.group("itemable.vendor_id") %> 
    <%= v.somehow_get_to.vendor.name %> Sold: <%= v.somehow_get_to.collect.sum(&:price) %> 

价格是保存该项目售出的项目字段。

我知道你不能像上面显示的那样分组,所以任何关于如何做的指示都会很棒。想避免将vendor_id添加到我的Items表中。


UPDATE

这里是我落得这样做。 添加vendor_id到项目。让我的生活更轻松。当然,这是一个更好的方法。

在我的项目模型

scope :in_orders_with, lambda { |orders, type| where('itemable_type IS ?', type).joins(:order) & orders } 

在我看来,(因为@ orders.closed_today实际上是从另一个视图传递)。

<% orders = @orders.closed_today %> 
<p> 
<% @items = Item.in_orders_with(orders, "Policy") %> 
<% if [email protected]? %> 
    <% @items.group_by{ |o| o.vendor }.each do |vendor, items| %> 
    <%= vendor.name %> <br />Qty Sold:<%= items.count %> Dollars Sold:<%= items.collect.sum(&:price) %><br /><br /> 
    <% end %> 
<% else %> 
    Nothing to report from Policies<br /> 
<% end %> 
</p> 

<% @orders.closed_today.with_policies.group_by{|o| o.itemable.vendor}.each do |vendor, orders| %> 
    <%= vendor.name %> SOLD: <%= orders.sum(&:price) %> 
<% end %> 
+0

什么item_table会是什么?得到未定义的错误。 – pcasa 2011-03-27 18:37:34

+0

'itemable'抱歉:) – fl00r 2011-03-27 20:29:07

+0

SO关闭。 o.itemable.vendor不工作,不得不像这样强制它o.items.last.itemable.vendor。 – pcasa 2011-03-27 20:55:19