为什么在向哈希添加哈希时,Ruby似乎嵌套了添加的哈希?

时间:2012-04-13 18:10:19

标签: ruby-on-rails 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}]
 }

从上面的输出中可以看出,似乎在另一个哈希中有一个哈希用于权限['enrollment'] [{}] !!!

我想访问注册的读取权限,如下所示:permissions['enrollment']['read']但根据puts permission,它将无效,我收到此错误TypeError: can't convert String into Integer

要让我访问注册的读取权限,我必须这样做:permissions['enrollment'][0]['read']

如何才能使注册读取权限与此相同...... permissions['enrollment']['read']

1 个答案:

答案 0 :(得分:4)

您的语法已关闭。哈希由花括号分隔。方括号用于数组。如果你来自PHP世界,你可能会混淆两者。试试这个:

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