2017-10-11 24 views
0

私はおそらく非常に明白なものがないことを知っています。 Rails5のビューでJSON配列を繰り返し処理しようとしています。私はいくつかのことを試しましたが、レンダリングするのに適切なアイテムを得ることができません。以下のコードは{"name"=>"Large Plaque", "price"=>"2500"} {"name"=>"Small Plaque", "price"=>"1500"}を私の視点にしています。Rails5でJSON配列を反復する

のconfig/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

あなたは 'JSON.load(File.read( 'config/plaque_data.json'))'の出力を見ようとしましたか? (例えばあなたのirbコンソールで) – MrYoshiji

+0

@MrYoshijiこれはコンソール '=" {"products" => [{"name" => "大きなプラーク"、 "価格" => "2500"}、 –

+1

本当に 'Rails.root.join( 'config/plaque_data.json')のように、そのファイルの絶対パスを指定するべきです。 '。 – tadman

答えて

2

'k'はハッシュなので、k ['name']とk ['price']にアクセスして価格と名前を抽出する必要があります。

また、配列上で.eachを使用する場合、通常は1つのブロック引数(2つのkとvを持つ)だけを宣言します。

あなたは通常、あなたが反復処理されたと思ったものを、おそらくである、2つのブロックハッシュの引数(および他の可算方法の多くを)書きますが、

@plaqy['products'] 

ジャスト拡大する配列

0

です上の答えでは、あなたの視点では配列全体を繰り返していますが、ハッシュのように扱います。だからあなたのような何かにあなたのビューを変更する場合があります

ビュー/ plaqueorders/new.html.erb

... 
<% @plaqy['products'].each do |product|%> 
Name: <%= product['name'] %> 
Price: $<%= product['price'] %> 
<% end %> 
... 

明らかにブロックを使用して、各製品をレンダリングする方法に基づいて変更されますが、そのようなものはうまくいくでしょう。

あなたは形状が(奇妙大丈夫)であるかわからないので、ハッシュをループにしたい場合は、各ループkの変数の命名

... 
<% @plaqy['products'].each do |product|%> 
<% product.each do |key, value| %> 
    <%= key %>: <%= value %> 
<% end %> 
<% end %> 
... 

ような何かをしたいと思い、 vは一般にハッシュのために予約されています。しかし、あなたのコードでは、kはハッシュの鍵ではなく、個々の個々の製品であった。

関連する問題