Rails循环哈希

时间:2014-01-06 21:54:38

标签: ruby-on-rails json ruby-on-rails-4

一个非常简单的问题,但我似乎无法让它发挥作用。

下面只包含一个Property,但Properties内可能有多个Name。如何迭代此哈希并仅显示每个Property的{​​{1}}?

{"GetPropertiesResponse"=>{"Properties"=>{"Property"=>{"Breakfast"=>"IN", "Country"=>"GB", "Currency"=>"GBP", "Id"=>"1834", "Name"=>"Hotel Name"}}}}

我在我看来试过这个:

<% @json['GetPropertiesResponse']['Properties']['Property'].each do |property| %>
  <%= property['Name'] %>
<% end %>

我收到了这个错误:

没有将String隐式转换为整数

2 个答案:

答案 0 :(得分:0)

如果您说可能有多个property哈希,那么这应该有效:

<% @json['GetPropertiesResponse']['Properties'].each do |property, value| %>
  <%= value['Name'] %>
<% end %>

答案 1 :(得分:0)

我会在此哈希上使用#each_value,因为您似乎没有使用密钥

<% @json['GetPropertiesResponse']['Properties'].each_value do |value| %>
  <%= value['Name'] %>
<% end %>

应该有效。请注意,第二行是<%= value['Name'] %>不是 <%= property['Name'] %>

P.S。另外一点,我不知道你为什么要使用密钥&#34; Property&#34;在您的属性哈希中。这似乎是一种以这种方式迷惑自己的好方法。属性哈希中的键应该是它们描述的属性的唯一键。由于每个都是一个属性,字符串&#34;属性&#34;没有帮助描述或区分。