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>
什麼item_table會是什麼?得到未定義的錯誤。 – pcasa 2011-03-27 18:37:34
'itemable'抱歉:) – fl00r 2011-03-27 20:29:07
SO關閉。 o.itemable.vendor不工作,不得不像這樣強制它o.items.last.itemable.vendor。 – pcasa 2011-03-27 20:55:19