在Rails5中迭代JSON数组
问题描述:
我知道我错过了一些可能非常明显的东西。我想在我的Rails5视图中遍历一个JSON数组。我尝试了几件事情,但似乎无法获得适当的渲染项目。以下代码呈现给我看来{"name"=>"Large Plaque", "price"=>"2500"} {"name"=>"Small Plaque", "price"=>"1500"}
。在Rails5中迭代JSON数组
配置/ plaque_data.json
{
"products": [
{
"name": "Large Plaque",
"price": "2500"
},
{
"name": "Small Plaque",
"price": "1500"
}
]
}
控制器/ plaqueorders_controller.rb
...
def new
@plaqy = JSON.load File.read('config/plaque_data.json')
end
...
视图/ plaqueorders/new.html.erb
...
<% @plaqy['products'].each do |k, v| { name: k, price: v } %>
<%= k %>
<% end %>
...
答
由于'k'是散列,因此您需要访问k ['name']和k ['price']来提取价格和名称。
另外,当你在一个数组上使用.each时,通常只声明一个块参数(你有两个,k和v)。
通常你写的哈希值2个参数(和许多其他可枚举方法),这可能是你以为你遍历,但是
@plaqy['products']
是一个数组
答
只是为了扩大在上面的答案中,在你看来你正在遍历一个数组,但将它当作一个散列来对待。所以,你可能希望将视图更改为类似:
的意见/ plaqueorders/new.html.erb
...
<% @plaqy['products'].each do |product|%>
Name: <%= product['name'] %>
Price: $<%= product['price'] %>
<% end %>
...
显然块将改变根据您要如何呈现每一个产品,但类似的东西会起作用。
如果你想遍历散列,因为你不知道什么形状(奇怪,但没关系),你想要的东西像
...
<% @plaqy['products'].each do |product|%>
<% product.each do |key, value| %>
<%= key %>: <%= value %>
<% end %>
<% end %>
...
命名的每个循环k的变量, v通常保留用于散列。但在你的代码中,k不是散列的关键,而是每个单独的产品。
你有没有试过看JSON.load(File.read('config/plaque_data.json'))''的输出? (例如你的irb控制台) – MrYoshiji
@MrYoshiji这是在控制台打印的内容'=> {“products”=> [{“name”=>“Large Plaque”,“price”=>“2500”},{ “name”=>“Small Plaque”,“price”=>“1500”}]}' –
您确实应该指定该文件的完整路径,例如'Rails.root.join('config/plaque_data.json') '。 – tadman