型号
1 个平面发票表,其中包含 sales_invoice_date、you_ref 等字段
Controller
def raw
@invoices = Invoice.find(:all, :order => 'sales_invoice_date, id')
@invoice_days = @invoices.group_by { |day| day.sales_invoice_date }
end
查看
<% @invoice_days.sort.each do |day, invoices| %>
<h2><%= day.to_date.to_s(:long) %></h2>
<% for invoice in invoices %>
<div class="invoice_line">
<strong><%= invoice.your_ref %></strong>
Sales invoice date: <%= invoice.sales_invoice_date.to_date.to_s(:long) %>
</div>
<% end %>
<% end %>
这让我实现了目标一半。它打印以下内容:
September 9, 2012
2222 Sales invoice date: September 9, 2012
5555 Sales invoice date: September 9, 2012
2222 Sales invoice date: September 9, 2012
October 1, 2012
1111 Sales invoice date: October 1, 2012
1111 Sales invoice date: October 1, 2012
1111 Sales invoice date: October 1, 2012
November 11, 2012
3333 Sales invoice date: November 11, 2012
December 12, 2012
0000 Sales invoice date: December 12, 2012
我需要的是一种在日期循环中对唯一的“your_ref”值进行分组和再次排序的方法,它看起来像这样:
September 9, 2012
2222
2222 Sales invoice date: September 9, 2012
2222 Sales invoice date: September 9, 2012
5555
5555 Sales invoice date: September 9, 2012
October 1, 2012
1111
1111 Sales invoice date: October 1, 2012
1111 Sales invoice date: October 1, 2012
1111 Sales invoice date: October 1, 2012
November 11, 2012
3333
3333 Sales invoice date: November 11, 2012
December 12, 2012
0000
0000 Sales invoice date: December 12, 2012
谢谢
最佳答案
而不是
<% for invoice in invoices %>
<div class="invoice_line">
<strong><%= invoice.your_ref %></strong>
Sales invoice date: <%= invoice.sales_invoice_date.to_date.to_s(:long) %>
</div>
<% end %>
尝试:
<% invoices.group_by(&:your_ref).sort.each do |ref, ref_invoices| %>
<div class="invoice_line">
<strong><%= ref %></strong>
</div>
<% for invoice in ref_invoices %>
<strong><%= invoice.your_ref %></strong>
Sales invoice date: <%= invoice.sales_invoice_date.to_date.to_s(:long) %>
<% end %>
<% end %>
这还将按引用对发票进行分组。
关于ruby-on-rails - 嵌套 group_by 和在 Rails 上对 ruby 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12989599/