2011-03-27 140 views
0

有簡單的訂單 - 項目的應用程序。沒有購物車。爲我的報告需要聯合範圍的幫助。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> 

回答

0
<% @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