【问题标题】:Looping through nested yaml data in .erb file循环遍历 .erb 文件中的嵌套 yaml 数据
【发布时间】:2018-03-26 05:02:46
【问题描述】:

我对 YAML 语法不太熟悉,似乎无法通过搜索找到解决方案。

我正在尝试遍历这个数据文件:

- category1:
  title: Title 1
  sub:
    name: name1
    desc: desc1
  sub:
    name: name2
    desc: desc2
  sub:
    name: name3
    desc: desc3
- category2:
  title: Title 2
  sub:
    name: name1
    desc: desc1
  sub:
    name: name2
    desc: desc2
  sub:
    name: name3
    desc: desc3

这是我的 erb 循环:

<% data.filename.category.each do |filter| %>
  <%= filter["title"] %>
  <% filter["sub"].each do |sub| %>
      <%= sub["name"] %>
      <%= sub["desc"] %>
  <% end %>
<% end %>

期望的结果是:

平铺1

名称1 描述1 名称2 描述2 名称3 描述3

平铺2

名称1 描述1 名称2 描述2 名称3 描述3

【问题讨论】:

  • 我不熟悉 ERB,但有两件事显然是错误的:1)category 1 与以下键处于相同的缩进级别,使它们成为 category 1 键的兄弟,而我认为它们应该是一个嵌套映射。 2) data.filename.category 不太可能匹配任何内容,因为 YAML 中没有 category 键,并且 YAML 的根对象是一个序列。
  • 另外,在 YAML 映射中,您不能拥有多个与 sub 相同的键。您必须将 sub 的值改为一个序列。

标签: yaml frontend erb middleman


【解决方案1】:

类似于How to get YAML files to render in middleman with erb...

以下内容应该可以帮助您解决问题,这主要是数据结构的问题 - 您的循环处于正确的轨道上:

filename.yml文件的内容改为:

items:
- title:  "Title 1"
  subs:
    - name: "name1"
      desc: "desc1"
    - name: "name2"
      desc: "desc2"
    - name: "name3"
      desc: "desc3"
- title:  "Title 2"
  subs:
    - name: "name1"
      desc: "desc1"
    - name: "name2"
      desc: "desc2"
    - name: "name3"
      desc: "desc3"

并且在您的模板文件中(假设您的数据文件位于 /data/filename.yml):

<% data.filename.items.each do |item| %>
    <h1><%= item.title %></h1>
    <% item.subs.each do |sub| %>
        <h2><%= sub.name %></h2>
        <h3><%= sub.desc %></h3>
    <% end %>
<% end %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多