这是我正在处理的哈希,
a = {
#...
:fares => {
:itinerary_fare => {
:segment_names=>"C",
:free_seats => "6",
:fare_for_one_passenger => {
:free_seats=>"0",
:@currency => "TL",
:@non_refundable => "false",
:@price => "439.0",
:@service_fee => "25.0",
:@tax => "33.0",
:@type => "Y"
},
:@currency => "TL",
:@non_refundable => "false",
:@price => "439.0",
:@service_fee => "25.0",
:@tax => "33.0",
:@type => "C"
},
:@currency => "TL",
:@tax => "33.0"
},
#..
}
这里还有另一个例子http://pastebin.com/ukTu8GaG。
给我头像的代码,
a[:fares][:itinerary_fare].each do |f|
puts f[:@price]
end
如果我将其写入控制台,它会让我“无法将符号转换为整数”错误。但如果我写,a[:fares][:itinerary_fare][:@price]
它的效果非常好。
最奇怪的部分是,如果我将代码写入haml文件
%tbody
-@flights.each do |a|
%tr.flight
%td
-a[:fares][:itinerary_fare].each do |f|
-puts f[:@price] #Weird stuff happens here
.prices
%input{:type=>"radio",:name=>"selectedfight",:value=>"#{a[:id]}"}
= f[:@price]
%br
它有效,它会将价格打印到我的控制台,但它在相同的行中失败。
can't convert Symbol into Integer file: flights.haml location: [] line: 18
这是我见过的最令人不安的错误,谢谢你的帮助。
大部分时间都有超过1 :itinerary_fare
,我必须迭代。
答案 0 :(得分:8)
a[:fares][:itinerary_fare]
是Hash
。块Hash#each
yields key-value-pair arrays。
所以,f
需要,例如块中的数组[:@price, "439.0"]
。
因此,您使用符号(:@price
)作为数组索引。预期整数。
在a[:fares][:itinerary_fare][:@price]
中,您将其作为哈希键提供,当然有效。
答案 1 :(得分:-1)
为什么要删除上一个已经正确回答的问题?你只能用更多信息更新它。
正如前一篇文章中其他用户所回答的那样,您正在迭代a[:fares][:itinerary_fare]
中的元素。您可以通过以下方式看到:
a[:fares][:itinerary_fare].each do |f|
puts f
end
你不需要循环,你可以使用:
a[:fares][:itinerary_fare][:@price]
如果你有多个:itinerary_fare它只考虑最后一个,因为它是哈希的关键:票价。也许你需要一个数组(从最小的元素开始):
a = {:id=>"1",
:fares=>{
:itinerary_fares=>[{:@price=>"439"}, {:@price=>"1000"}]
}
}
然后:
a[:fares][:itinerary_fares].each do |f|
puts f[:@price]
end