2012-04-13 8 views
0

私は、次のような2次元のハッシュを作成しようとしています:なぜハッシュにハッシュを追加すると、Rubyは追加されたハッシュをネストしているようですか?

permissions['enrollment'] = ['read' => true, 'create' => true, 'update' => true] 
permissions['invoices'] = ['read' => true, 'create' => false, 'update' => false] 

これは私が何をすべきかです...

permissions = Hash.new 
permissions['enrollment'] = ['read' => true, 'create' => true, 'update' => true] 
permissions['invoices'] = ['read' => true, 'create' => false, 'update' => false] 

私はIRBでアクセス許可を「置く」とき、私はこれを取得...

{ 
    "enrollment"=>[{"read"=>true, "create"=>false, "edit"=>false}], 
    "invoices"=>[{"read"=>true, "create"=>false, "update"=>false}] 
} 

あなたは上記の出力を見てわかるとおり、アクセス権のために別のハッシュ[「登録」] [{}]内部のハッシュがあるようです!

私はこのような登録のための読み取り権限にアクセスしたい

permissions['enrollment']['read']が、私は入学のための読み取り権限にアクセスするためにTypeError: can't convert String into Integer

を、それは動作しませんし、私はこのエラーを取得するputs permissionに応じて私がしなければなりませんこれはpermissions['enrollment'][0]['read']です。

このように登録の読み取りアクセス権を作成するにはどうすればよいですか。permissions['enrollment']['read']

答えて

4

構文がオフです。ハッシュは中括弧で区切られています。角括弧は配列用です。あなたがPHPの世界から来ている場合は、2つを混乱させるかもしれません。これを試してみてください:

permissions = Hash.new 
permissions['enrollment'] = {'read' => true, 'create' => true, 'update' => true} 
permissions['invoices'] = {'read' => true, 'create' => false, 'update' => false} 
+0

PHPの世界から来ています。ありがとう:) – leonel