我知道我遗失的东西可能非常明显。我试图在我的Rails5视图中迭代JSON数组。我尝试了几件事,但似乎无法获得正确的渲染项目。以下代码将{"name"=>"Large Plaque", "price"=>"2500"} {"name"=>"Small Plaque", "price"=>"1500"}
呈现给我的视图。
配置/ 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 %>
...
答案 0 :(得分:2)
由于'k'是哈希值,您需要访问k ['name']和k ['price']来提取价格和名称。
此外,当您在数组上使用.each时,通常只声明一个块参数(您有两个,k和v)。
你通常会为Hashes(以及许多其他Enumerable方法)编写2个块参数,这可能是你认为你正在迭代的,但是
@plaqy['products']
是一个数组
答案 1 :(得分:0)
为了扩展上面的答案,在你的视图中,你正在迭代一个数组,但把它当作一个哈希。因此,您可能希望将视图更改为:
<强>视图/ 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不是哈希的关键,而是每个单独的产品。