Rails3 поможет с областью соединений - PullRequest
0 голосов
/ 27 марта 2011

Есть простой заказ - пункт приложение.Нет корзиныНужна помощь в объединенных областях для моих отчетов.

Элемент полиморфный (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 для предметов.Сделал мою жизнь проще.Конечно, это лучший способ сделать это.

В моей модели Items

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 !@items.blank? %>
  <% @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>

1 Ответ

0 голосов
/ 27 марта 2011
<% @orders.closed_today.with_policies.group_by{|o| o.itemable.vendor}.each do |vendor, orders| %>
  <%= vendor.name %> SOLD: <%= orders.sum(&:price) %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...