【问题标题】:Outputting data with erb and middleman用erb和middleman输出数据
【发布时间】:2015-09-24 10:11:15
【问题描述】:

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

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

【问题讨论】:

    标签: ruby yaml erb middleman


    【解决方案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."}]}
    

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

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-02
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多