2011-11-30 86 views
1

我需要在各个列上获取并分组一个模型。我的Stock模型包含variation_id, color_id, storage_id, in_stock。通过变化与SQLite和Postgre必须工作红宝石轨道计数和PostgreSQL组

欲组然后通过IN_STOCK

  • 变形例1(共:22)的存储和显示总和

    • 寄存一个:12
    • 存储B:10
  • 变化2(总计:234)

    • 寄存一个:12
    • 寄存B:10
    • 寄存C:212

@stocks = Stock.locked.all

视图应该是什么样的?到目前为止,我已经能够按变化进行分组,但不知道如何迭代存储并进行计算。如何提取将其移动到模型的逻辑?

<% @stocks.group_by(&:variation).each do |variation, stocks| %> 
    <h2><%= variation.name %> (<%= variation.color.name %>)</h2> 
<% end %> 

*编辑*

返工的图。我得到变体和存储,但总和功能失败undefined method '+' for #<Stock:0x007ff15a06cf68>

<% @stocks.group_by(&:variation).each do |variation, stocks| %> 
    <h2><%= variation.name %> </h2> 

    <% stocks.group_by(&:storage).each do |storage, stock| %> 
    <li><%= storage.name %>: <%= stock.sum(:in_stock) %></li> 
    <% end %> 
<% end %> 

回答

1

数据被正确提取。错误来自操作返回数组的错误方式。这是工作代码。

<% @stocks.group_by(&:variation).each do |v, stocks| %> 
    <h3 class="variations"><%= v.name %>: <%= stocks.map {|x| x.in_stock}.sum %></h3> 
 <% stocks.group_by(&:storage).each do |storage, s| %> 
  <li><%= storage.name %>: <%= s.map {|x| x.in_stock}.sum %></li> 
 <% end %> 
<% end %>