1

是否可以使用基于产品数据文件的标签和类别来遍历数据文件?例如:

# toys.yml
- name: Fire Truck
  id: 1
  description: Red
  category: Automobile
  url: toys/fire-truck
  tags: red, truck

- name: Freight Train
  id: 2
  description: Fast delivery mail
  url: toys/freight-train
  category: Train
  tags: freight, train, rail

我正在使用代理页面来生成页面。

data.toys.each do |t|
  proxy toys.path, "toys.html", locals: { toy: t}, ignore: true
end

index.html.erb模板将是:

<div class="toys">
 <% data.toys.each do |t| %>
   <h1><%= t.name %></h1>
   <p><%= t.desription %></p>
   <span class="category"><%= t.category %></span> // I would like this to be linked to generate categories based on the toys.yml file
  <span class="tags"><%= t.tags %></span> // The same as category, generated tag pages based on the toys.yml
 <% end %>
</div>

我怎样才能做到这一点?我应该创建:

  • 单独的玩具页面,例如。firetruck.md 并且不用担心生成页面和使用元数据作为创建类别和标签页面的一种方式?
  • 或者,我应该创建一个category.yml可以用类别填充它,有没有办法将它链接到toys.yml唯一 ID?

我正在学习静态页面,并想知道如何在不构建数据库支持的应用程序的情况下实现这一点。

4

1 回答 1

1

您可以创建一个category.html.erb文件和代理,以便为 Toys.yml 文件中的每个唯一类别创建一个类别页面

categories.each do |c|
  proxy "#{c}.html", "category.html", locals: { category: c, toys: data.toys}, ignore: true
end

至于如何获取类别列表,您可以在 data.toys 列表上使用标准 ruby​​ 操作,例如

categories = data.toys.map {|t| t.category}.uniq

标签将是相似的,但您需要解析逗号分隔的列表。

您还可以构建更复杂的数据类型或定义自己的 Ruby Toy 和 Category 类,然后将它们传递给 locals 参数中的代理调用。例如,这将允许您让类别对象包含属于该类别的玩具对象列表。在这种情况下,ruby Enumerablegroup_by方法会很有用。

于 2016-11-16T10:26:10.467 回答