“无法将符号转换为整数”奇怪的错误

时间:2012-05-10 17:59:31

标签: ruby haml

这是我正在处理的哈希,

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,我必须迭代。

我的数据可以显示为http://postimage.org/image/6nnbk9l35/

2 个答案:

答案 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