在视图中动态显示哈希/ data / JSON

时间:2016-09-27 17:19:24

标签: ruby sinatra

我正在尝试使用Ruby和Sinatra动态地将标题和tbody插入到HTML中。直到我得到标题的那一刻,但我没有在身体上取得成功。

这是我的代码:

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

如何显示: enter image description here 一种解决方法是放置一种增量,比如

<%= value[0] %>

但我找不到优雅的方式。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你想在单独的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}