我想输出一些数据,但我不确定是否可以在不更改数据文件的情况下输出数据。基本上我有一个具有以下结构的YAML文件
items:
- category: red
name: super fun times
note: likes fun
- category: red
name: sunshine
note: wear sunglasses
- category: blue
name: crazy face
note: avoid.
我正在做的是像这样循环
<% data.options.items.each do |q| %>
<h2><%= q.category %></h2>
<p><%= q.name %></p>
<% end %>
我希望能够在输出时按类别分组项目,所以它将类似于以下内容。
<h2>red</h2>
<p>super fun times</p>
<p>sunshine</p>
<h2>blue</h2>
<p>crazy face</p>
我几乎只想输出一次类别,列出该类别下的项目,然后当出现新类别时输出一个和任何相关数据,而不必重复代码块。
答案 0 :(得分:1)
您可以采用的方法是使用group_to
按群组对项目进行聚类,从而为每个类别生成一组数组:
<% data.options.items.group_by(&:category).each do |group| %>
<h2><%= group.first %></h2>
<% group.last.each do |item| %>
<p><%= item.name %></p>
<% end %>
<% end %>
在这种情况下,对项目集合运行group_by
会提供具有以下格式的对象:
{"red"=>[{"category"=>"red", "name"=>"super fun times", "note"=>"likes fun"},
{"category"=>"red", "name"=>"sunshine", "note"=>"wear sunglasses"}],
"blue"=>[{"category"=>"blue", "name"=>"crazy face", "note"=>"avoid."}]}
这允许您遍历对象,从而更容易将组保持在标记中。
希望它有所帮助!