我正在为作者制作季度版税报告。我有一个报告模型(没有数据库表支持),我用它来显示基于年份和季度的特定作者的报告。我将其路由到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
只返回产品ID,而不是标题(它存储在products表中,而不是line_items表中)。我显然无法在这里访问product.title
,但我需要在分组中获得标题。
我的第二个问题是,我想要总计每个订单项的数量,而不只是循环遍历每个订单项的数量,而只是显示它。所以不是得到,1,10,55 ......我只想要66.我尝试了数组#injection,但我没有理解语法。
并且,所有人都说......我确信我的工作量超出了我的需要。我从模型中的很多控制器代码开始,但是有很多undefined method
错误。任何建议或帮助将不胜感激。
答案 0 :(得分:0)
我同意您需要重构您的代码,而我只是针对您的具体问题提供这些答案 - 这些不是我的总体建议。
请记住,这是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 } %>