Вывод данных с помощью erb и 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>
Я просто хочу вывести категорию один раз, перечислить элементы под этой категорией, а затем, когда появится новая категория, вывести эти и любые соответствующие данные, без необходимости повторять фрагменты кода.
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."}]}
Это позволяет затем выполнять итерацию по объекту, упрощая разделение групп в разметке.
Надеюсь, поможет!