2011-11-30 87 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 %>