使用Ruby on Rails显示对象

时间:2012-07-24 17:48:19

标签: ruby-on-rails ruby json

我有一些看起来像这样的JSON。我将它存储并读入一个对象@items。

[
 {
  {
    "id": "A",
    "description": "a_description"
  }, 
  {
    "id": "B",
    "description": "b_description"
  }
 }, 
 {
  {
    "id": "A",
    "description": "a_description"
  }, 
  {
    "id": "B",
    "description": "b_description"
  }
 }
] 

我的目标是显示一个包含两列的表,一列标记为A,另一列标记为B,其中每一行都给出“a_description”和“b_description”。我不知道该怎么做。

2 个答案:

答案 0 :(得分:2)

这样的事可能

<tr><th>A</th><th>B</th></tr>
<% @items.each do |item| %>
  <tr><td><%=item[0].description%></td><td><%=item[1].description%></td></tr>
<% end %>

答案 1 :(得分:2)

啊,啊,&#39;数组哈希和散列问题。

绕过你的&#34;故障&#34;你首先要转换的问题

{
  "id": "A",
  "description": "foo"
},
{
  "id": "B",
  "description": "bar"
}

进入{"A" : "foo", "B" : "bar" }

@new_items = @items.map do |item|
  output = {}
  item.each do |hash|
    output.merge!(hash["id"] => hash["description"])
  end
end

然后@new_items变为(故意按顺序呈现,因为哈希元素没有被排序)

[
  { 
    "A": "a1_description",
    "B": "b1_description"
  },
  { 
    "B": "b2_description",
    "A": "a2_description"
  }
]

从那里开始,每一行都只是一个哈希值,因此您可以根据您所在的列取消引用所需的值。

@new_items.each do |item|
  puts "#{item['A']} is paired with #{item['B']}"
end

当然,如果你不想硬编码,可以动态检索密钥&#34; A&#34;和&#34; B&#34;使用.keys