jmi*_*mil 2 ruby-on-rails ruby-on-rails-3
我有一个带有line_items和供应商的订单模型.在显示订单时,我想按供应商对line_items进行分组.
class LineItem < ActiveRecord::Base
belongs_to :order
belongs_to :vendor
end
class Order < ActiveRecord::Base
has_many :line_items
has_many :vendors, :through => :line_items
end
class Vendor < ActiveRecord::Base
has_many :line_items
end
Run Code Online (Sandbox Code Playgroud)
我想显示供应商和订单项的排序列表:
You have placed an order for the following items:
Vendor 1
Line item 1
Line item 2
Line item 3
Vendor 2
Line Item 4
Line Item 5
...
Run Code Online (Sandbox Code Playgroud)
我目前的想法是
order.vendors.each do |a_vendor|
a_vendor.name
!!?? AND THEN WHAT GOES HERE ??!!
end
Run Code Online (Sandbox Code Playgroud)
请帮忙.我无法弄清楚这一点.也许这可以通过排序来完成?
如果订单只有一个供应商,那么我只想显示一个供应商.
这个怎么样:
<% @order.line_items.all.group_by{|i| i.vendor}.each do |vendor, items| %>
<%= content_tag :h2, vendor.id %>
<ul>
<% items.each do |i| %>
<%= content_tag :li, i.id %>
<% end %>
</ul>
<% end %>
Run Code Online (Sandbox Code Playgroud)
sort_by(&:vendor)与sort_by {| v |相同 v.vendor},但块式语法为您提供了更多的灵活性.例如,您可以使用控制器中的供应商名称进行排序:
@sorted = @order.line_items.all.group_by(&:vendor).sort_by{|vendor, items| vendor.name}
Run Code Online (Sandbox Code Playgroud)
然后在视图中:
<% @sorted.each do |vendor, items| %>
<%= content_tag :h2, vendor.name %>
<ul>
<% items.each do |i| %>
<%= content_tag :li, i.id %>
<% end %>
</ul>
<% end %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
617 次 |
| 最近记录: |