在视图中动态显示 hashes/data/JSON

Dynamically display hashes/data/JSON in the view

我正在尝试使用 Ruby 和 Sinatra 将 headers 和 tbody 动态插入到 HTML 中。直到我得到 headers 但我在 body.

上没有成功

这是我的代码:

get '/list' do
 urlData = "http://localhost:3000/data"
 responseData = RestClient.get urlData

 @banks = JSON.parse(responseData.body)
 @keys = @banks[0].keys # OK
 @values =  @banks.map(&:values) # Trying to put in the html

 erb :list

end

观点如下:

<thead>
 <tr>
  <% @keys.each do |key| %>
   <th><%= key %></th>
  <% end %>
 </tr>
</thead>

<tbody>
 <% @values.each do |value| %>
  <tr>
   <td><%= value %></td>
  </tr>
 <% end %>
</tbody>

JSON格式:

[
 {
  "ID": 247,
  "Code": "246",
  "Name": "ABC BANK S.A."
 },
 {
  "ID": 248,
  "Code": "25",
  "Name": "Beta Bank"
 }, ...
]

如何显示: 解决的方法是放置一个增量,比如

<%= value[0] %>

但是我找不到优雅的方式。

如果我没理解错的话,你想在单独的 td 标签中显示值,你可以这样做。 @values 是包含单元格值的数组(行)数组。

<tbody>
 <% @values.each do |row| %>
  <tr>
    <% row.each do |value| %>
     <td><%= value %></td>
    <%end%>
  </tr>
 <% end %>
</tbody>

编辑:你得到这样的数组数组

banks.map{|x| x.values}
#[[247, "246", "ABC BANK S.A."], [248, "25", "Beta Bank"]]

然后你像这样将它传递给你的视图,不确定是否需要

erb :list, :locals => {values: @values, keys: @keys}