我有一个如下所示的数据结构:
@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"}]
OR
@results['events']['event'].each do |event|
event.inspect
end
["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"]
我认为我可以这样做:
@results['events']['event'].each do |event|
event['modified']
end
但是当我这样做时,我得到了这个:
无法在包含以下内容的行上将String转换为Integer:event['modified']
我做错了什么?
答案 0 :(得分:3)
inspect
返回一个字符串。 each
会丢弃从块返回的值,因此实际上您在输出中看到的是调用each
的对象的值。使用p obj
打印obj
。
你得到“无法将字符串转换为整数”,因为如果你在each
实例上调用Hash
并向其传递单参数块,则使用表示键值对的数组调用此块(比如[key, value]
)。在event['modified']
中,您尝试使用String
索引从数组中获取值。数组只接受整数索引,因此Ruby会尝试进行转换并失败。
你想要的是
@results['events']['event'].each do |eventProperty, eventPropertyValue|
# do something here
end
答案 1 :(得分:0)
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"
}
]
拥有一个哈希数组更有意义:每个事件一个哈希。使用符号作为散列键也更清晰,更有效。
希望有所帮助。