2011-06-26 40 views
1

我得到散列,其中包含用戶角色,控制器名稱和此角色可以訪問的控制器操作列表。哈希與數組 - 獲取數組元素

access = { 
    'admin' => [ 'users' => ['edit','delete'], 
       'messages' => ['show','update'] 
       ], 
    'user' => [ 'index' => ['index','sign-out'], 
       'messages' => ['show','index'] 
       ] 
} 

我該如何檢查access['admin']['users']['edit']的存在?

回答

5
access['admin']['users'].include? 'edit' 

然而,這可能是一個問題:您正在使用... => ['users'=>['edit','delete'],...] 這將創建一個內部的哈希值的數組。例如:

{'a'=>'b'} #=> {"a"=>"b"} 
['a'=>'b'] #=> [{"a"=>"b"}] 

所以考慮使用此:

access = { 
    'admin' => { 'users' => ['edit','delete'], 
       'messages' => ['show','update'] 
       }, 
    'user' => { 'index' => ['index','sign-out'], 
       'messages' => ['show','index'] 
       } 
} 
+0

@jtbandes謝謝你的答覆,這是確切的,我需要),但'訪問[ '管理員'] [ '用戶']包含? 「edit''。說_no方法exists_。我用'access ['admin'] ['users']替換它。grep(/ edit /)。size> 0'也許存在更優雅的方式? –

+0

@Vladimir Tsukanov:很高興能幫到你!如果這回答了您的問題,您可以點擊左側的複選標記,將其標記爲已回答。謝謝:) – jtbandes

+0

@jtbandes我編輯了我以前的評論。也許你知道答案 –