2013-07-12 99 views
0

我是新來的Ruby和廚師,並正嘗試寫一個重新裝載與ACL根文件系統啓用了一本食譜。 Ohai正在使用所有已安裝的文件系統填充node['filesystem']。我如何能特別找到node['filesystem']下的所有物品node['filesystem'][:item]['mount'] == '/'哈希散列:返回哈希與特定的子項

+0

'節點[「文件系統」] [:項目] [「安裝」]'是單個散列元素,它或者是或不是一個斜線。你在尋找'[:item] ['mount']'是'/'的所有文件系統嗎? – Borodin

回答

1

您可以使用Hash#select方法:

filtered_nodes = node['filesystem'].select do |key, value| 
    key == :item && value['mount'] == '/' 
end 
+0

當node ['filesystem'] [:item] ['mount']'是一個單獨的散列元素時,'select'循環沒有什麼意義。 – Borodin

0
root_filesystems = node['filesystem'].select do |k, v| 
    node['filesystem'][k]['mount'] == '/' 
end 
0

更新我剛剛意識到我想你想要的。 :item不是散列鍵,而是您想要枚舉的鍵的佔位符。

這會爲你做

selection = node['filesystem'].keys.find_all do |item| 
    node['filesystem'][item]['mount'] == '/' 
end 

你的問題還不清楚,但我認爲node可能是文件系統的哈希值。

這將選擇具有等於/的元素[:item] ['mount']的所有密鑰node

selection = node.keys.find_all do |key| 
    val = node[key] 
    val.key? :item and val[:item]['mount'] == '/' 
end