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 %>
什么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