Файлы данных продуктов и категорий посредников YAML

Можно ли перебирать файл данных, используя теги и категории на основе файла данных продукта? Например.:

# 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 уникальным идентификатором?

Я изучаю статические страницы и хотел узнать, как это реализовать без создания приложения с поддержкой базы данных.


person Wasabi Developer    schedule 04.10.2016    source источник


Ответы (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, например.

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

Теги будут похожи, но вам нужно будет проанализировать список, разделенный запятыми.

Вы также можете создавать более сложные типы данных или определять свои собственные классы Ruby Toy и Category, которые вы затем передаете прокси-вызову в аргументе locals. Это позволит вам, например, иметь объекты категорий, содержащие список объектов-игрушек, принадлежащих к этой категории. В этом случае будет полезен метод ruby ​​Enumerable group_by.

person Gerard Condon    schedule 16.11.2016