2011-09-08 7 views
0

私はフォーム提出に基づいていくつかのjsonを構築しようとしています。私のJSONは(簡単にするために切り捨て)このようなものである必要があります:Ruby/Railsのネストされたハッシュmyhash ["key1"] ["childkey"] - NoMethodError

{"id":0,"creditCard":{"address":{"state":"AZ"}}} 

は基本的に私はこのようにそれをやろうとしている:

json_hash = Hash.new 
json_hash["id"] = 0 
json_hash["creditCard"]["address"]["state"] = "test" 
json_hash.to_json 

しかし、そのこのerrrorを投げる:

You have a nil object when you didn't expect it! 
You might have expected an instance of Array. 
The error occurred while evaluating nil.[] 

与えられた例の3行目(深くネストされたもの)。このようにルビーハッシュは機能しますか?または、私は取る必要がある余分なステップがありますか?

答えて

2

json_hash['creditCard']が3番目の行でnilと評価されているため、[]というメソッドはありません。

あなたは

json_hash = { "id" => 0,"creditCard" => { "address" => {"state" => "AZ"}}} 

を使用してそのようなハッシュを構築することができ、それが与えられた書式を持っています。

これは短い構文で、あなたが望むものを指定するためにjson_hashです。NOT単一のハッシュです。これは、その"creditCard"に、その"address"キーに別のハッシュ(すなわち{"state" => "AZ"})を含ま別ハッシュを格納し、その"id"キーに値0を持つハッシュです。このてこ転写産物で

ルック:

pry(main)> json_hash = { "id" => 0,"creditCard" => { "address" => {"state" => "AZ"}}} 
=> {"id"=>0, "creditCard"=>{"address"=>{"state"=>"AZ"}}} 
pry(main)> json_hash.object_id 
=> 2175368520 
pry(main)> json_hash['creditCard'].object_id 
=> 2175368560 
pry(main)> json_hash['creditCard']['address'].object_id 
=> 2175368600 

すべてのこれらの値が異なるobject_idを持っているので、彼らは同じこと、同じことの、どちらのプロパティではありません。

関連する問題