2015-07-07 2 views
1

Я хочу получить некоторые данные, и я не уверен, возможно ли это или нет, не меняя файл данных. В принципе у меня есть YAML файл со следующей структуройВывод данных с помощью erb и middleman

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."}]} 

Это позволяет затем перебирать объекта, что делает его легче держать группы отдельно в разметке.

Надеюсь, это поможет!

 Смежные вопросы

  • Нет связанных вопросов^_^