用erb和middleman输出数据

时间:2015-07-07 04:36:43

标签: ruby yaml erb middleman

我想输出一些数据,但我不确定是否可以在不更改数据文件的情况下输出数据。基本上我有一个具有以下结构的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>

我几乎只想输出一次类别,列出该类别下的项目,然后当出现新类别时输出一个和任何相关数据,而不必重复代码块。

1 个答案:

答案 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."}]}

这允许您遍历对象,从而更容易将组保持在标记中。

希望它有所帮助!