Добавление значений в group_by в Rails - PullRequest
0 голосов
/ 19 апреля 2011

Я работаю над созданием ежеквартальных отчетов о роялти для авторов.У меня есть модель отчета (не подкрепленная таблицей базы данных), которую я использую для отображения отчета для конкретных авторов на основе года и квартала.Я перенаправляю это на author/:author_id/:reports/:year/:quarter

У меня сейчас довольно уродливый код в контроллере, чтобы все заработало.Я могу изменить рефакторинг позже:

  def show
     @author = Author.find(params[:author_id])
     #find the orders that took place in the current quarter and year for the report
     @orders = Order.get_current_orders(quarter_range, params[:year])
     #find only the products that apply for the current author
     @author_products = @author.products
     #find only the line_items that match the current quarter's orders and the author's products
     @line_items = LineItem.find_all_by_order_id_and_product_id(@orders, @author_products)
     #group the line items by product
     @line_items_by_product = @line_items.group_by { |l| l.product_id }
   end

Это позволяет мне делать это на мой взгляд:

<%= @line_items_by_product.each do |product, line_item | %>
  <h3><%= product %></h3>
  <% line_item.each do |line_item| %>
    <%= line_item.quantity %> <br />
  <% end %>
<% end %>

Две вещи, которые мне нужно исправить.Сейчас product просто возвращает идентификатор продукта, а не заголовок (он хранится в таблице продуктов, а не в таблице line_items).Я не могу получить доступ к product.title здесь, очевидно, но мне нужно получить заголовок в группе.

Моя вторая проблема заключается в том, что вместо того, чтобы просто циклически пересматривать количество каждой отдельной позиции, я хочу подсчитатьколичество каждой позиции и просто отобразить это.Таким образом, вместо получения 1, 10, 55 ... я просто хочу 66. Я пробовал ввод массива #, но я не понимаю синтаксис.

И это все, что будет сказано ... ЯЯ уверен, что я делаю больше работы, чем мне нужно.Я начал с большого количества кода контроллера в модели, но у меня было много ошибок undefined method.Буду признателен за любой совет или помощь.

1 Ответ

0 голосов
/ 20 апреля 2011

Я согласен, что вам необходимо провести рефакторинг вашего кода, и я только предлагаю эти ответы на ваши конкретные вопросы - это не мои общие рекомендации.

Первая проблема

Помните, что это Ruby, экземпляр Product так же подходит для группировки, как и Integer, который вы используете в данный момент. Таким образом, вы можете изменить свой group_by звонок на:

@line_items_by_product = @line_items.group_by { |l| l.product }

... а затем измените свой взгляд на ...

<h3><%= product.title %></h3>

Вторая проблема

<%= line_item.sum {|li| li.quantity } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...