为什么可以';我不能从这个Ruby哈希访问一个项目吗?

为什么可以';我不能从这个Ruby哈希访问一个项目吗?,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我的数据结构如下所示: @results['events'].each do |event| event.inspect end ["event", {"modified"=>"2011-03-04 12:39:13", "groups"=>nil, "country_name"=>"United States", "city_name"=>"Morrison", "latitude"=>39.653992, "title"=>"Red Rocks Ind

我的数据结构如下所示:

@results['events'].each do |event|
  event.inspect
end
["event", {"modified"=>"2011-03-04 12:39:13", "groups"=>nil, "country_name"=>"United States", "city_name"=>"Morrison", "latitude"=>39.653992, "title"=>"Red Rocks Indian Art Show", "region_name"=>"Colorado"}] 
@results['events']['event'].each do |event|
  event['modified']
end

我想我可以做这样的事情:

@results['events'].each do |event|
  event.inspect
end
["event", {"modified"=>"2011-03-04 12:39:13", "groups"=>nil, "country_name"=>"United States", "city_name"=>"Morrison", "latitude"=>39.653992, "title"=>"Red Rocks Indian Art Show", "region_name"=>"Colorado"}] 
@results['events']['event'].each do |event|
  event['modified']
end
但当我这样做时,我得到了: 无法在包含以下内容的行上将字符串转换为整数:
event['modified']


我做错了什么?

inspect
返回一个字符串
each
丢弃从块返回的值,所以实际上您在输出中看到的是对象的值,在该值上调用了
each
。使用
p obj
打印
obj

您会得到“无法将字符串转换为整数”,因为如果您调用
散列
实例上的
每个
,并将单个参数块传递给它,则会使用表示键值对的数组调用此块(如
[键,值]
)。在
event['modified']
中,您试图使用
String
索引从数组中获取一个值。数组只接受整数索引,因此Ruby尝试进行转换,但失败

你想要的是

@results['events']['event'].each do |eventProperty, eventPropertyValue|
  # do something here
end

Rails只允许数组使用数字索引

尝试按如下方式重新构造数据结构:

events = [
           {
             :name => "event",
             :modified => "2011-03-04 12:39:13",
             :groups => nil,
             :country_name => "United States",
             :city_name => "Morrison",
             :latitude => 39.653992,
             :title => "Red Rocks Indian Art Show",
             :region_name => "Colorado"
           }
         ]
有一个散列数组更有意义:每个事件一个散列。另外,使用符号作为散列键更干净、更有效


希望有帮助。

Ok,我发现在上面的第一个代码片段中,我可以执行一个event1=event[1],然后执行event1['modified'],并获取该哈希元素。有人能给我解释一下为什么第二段没有给我一个好的散列吗?ruby初学者问题散列中四分之三的单词是多余的。1) 底部的ruby标记表示这是一个ruby问题。2) 这里没有说明是初学者还是高级。3) 一切都是一个问题。有关如何调试代码的提示,您可能想阅读感谢您的提示,但这是我遵循的外部API,似乎不是最好的实现。