使用 erb 和 middleman 输出数据

Outputting data with erb and 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>

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

您可以采用的一种方法是使用 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."}]}

这样您就可以遍历对象,从而更容易在标记中将组分开。

希望对您有所帮助!