HTML-таблица из двух итераций each


#1

Прошу совета.
Вводные, короткой строкой: во вьюху передаю @response обрабатываемого JSON и вывожу в HTML все нужные мне элементы следующим образом:

index.html.erb

<% @response.each do |item| %>
<% item['items'].each do |a| %>
<%= a['created_at'] %>
<a href="<%= a['employer']['alternate_url'] %>" target="_blank" ><%= a['employer']['name'] %></a>
<img src="<%= a['employer']['logo_urls']['90'] %>" />

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

Можно, конечно, сделать вот так, но это фигня, а не таблица:

<% @response.each do |item| %>
<% item['items'].each do |a| %>
<table class="Table1">
<tbody>
<tr>
<td><%= a['created_at'] %></td>
<td><a href="<%= a['employer']['alternate_url'] %>" target="_blank" ><%= a['employer']['name'] %></a></td>
<td><img src="<%= a['employer']['logo_urls']['90'] %>" /></td>
</tr>
</tbody>
</table>

(Kortirso) #2

table
tbody
- @response.each do |item|
- item['items'].each do |a|
tr
td= a['created_at']

и так далее, только все смещено по строчно
это пример с использованием slim’а


#3

инсталлить slim ради необходимости создать всего одну табличку… хм.

Может, не поняли, или же я плохо объяснил. Если each один, то проблем нет, делаем табличку обычным порядком. Но если работают сразу два итератора (причем я не могу закончить первый из них end и далее начинать таблицу), то получается куча-мала, а не таблица. Получаемый из JSON массив не самый удобный, он создается вот таким динамичным способом:

---------
response['items'].each do |item|
response = Typhoeus::Request.get('https://xxxxxxxx/' + item['id'] + '/xxxxxxxxxx',
method: :get,
  headers: { Authorization: "Bearer #{hash['access_token']}" }
  )
@response << JSON.parse(response.body)

, соответственно и обрабатывается заумно. Два итератора - самое простое, что пришло в голову и полностью работоспособно, но не очень гибко все это получается…


(Kortirso) #4

Мой ответ был не про slim, а просто как пример
Создается таблица, в ней 2 итератора, внутри второго итератора tr’ы
Если item’ов - 10, и a - 10, то будет создано 100 tr’ов внутри body


#5

Да, вы правы, так отлично пашет. Спс.