Я работаю над созданием ежеквартальных отчетов о роялти для авторов.У меня есть модель отчета (не подкрепленная таблицей базы данных), которую я использую для отображения отчета для конкретных авторов на основе года и квартала.Я перенаправляю это на 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
.Буду признателен за любой совет или помощь.