我有一个包含多个元素的加密数据库。如何遍历加密数据包中的所有元素。
以下是我在我的收件人中尝试过的代码,但循环始终返回加密值。
db_details = data_bag_item("data-bag-item", "data_bag_id",IO.read("# {node['secret-file']}"))
<% @db_details.each_pair do |key, value| %>
<%= "INSERT INTO data (key, value) VALUES
('#{key}', '#{value}';" %>
<% end %>
答案 0 :(得分:1)
数据包项目支持Ruby的Hash类中的大多数方法。所以在第一个实例中它看起来我们可以循环遍历哈希。
db_details = data_bag_item("data-bag-item", "data_bag_id",IO.read("# {node['secret-file']}"))
<% @db_details.each_pair do |key, value| %>
<%= "INSERT INTO data (key, value) VALUES
('#{key}', '#{value}';" %>
<% end %>
但EncryptedDataBagItem表示一个只读数据包项,其中除了与id键相关联的值之外的所有值都已加密。因此它不能像普通的ruby hash一样迭代.EncryptedDataBagItem类公开一个名为#to的方法提供解密数据包的哈希。使用此方法循环数据包项目
<% @db_details.to_hash.each_pair do |key, value| %>
<%= "INSERT INTO data (key, value) VALUES
('#{key}', '#{value}';" %>
<% end %>
答案 1 :(得分:1)
使用to_hash
。
db_details = data_bag_item("data-bag-item", "data_bag_id",IO.read("# {node['secret-file']}"))
db_details_iterable = db_details.to_hash
db_details_iterable.each do |k, v|
...
end
答案 2 :(得分:0)
数据包项目支持Ruby的Hash
类中的大多数方法。请参阅the Hash#each
documentation for details。