5

这是我正在处理的哈希,

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/

4

2 回答 2

8

a[:fares][:itinerary_fare]是一个HashHash#each 生成块的键值对数组

所以,f例如在块中的数组[:@price, "439.0"]

因此,您使用符号 ( :@price) 作为数组索引。需要一个整数。

a[:fares][:itinerary_fare][:@price]您将其作为散列键提供时,它当然可以工作。

于 2012-05-10T20:35:36.953 回答
-1

为什么要删除之前已经正确回答的问题?你只能用更多信息更新它。正如其他用户在您之前的帖子中所回答的那样,您正在迭代a[:fares][:itinerary_fare]. 你可以看到这个:

a[:fares][:itinerary_fare].each do |f|
     puts f
end

而且你不需要循环,你可以使用:

a[:fares][:itinerary_fare][:@price]

如果你有多个:itinerary_fare,它只会考虑最后一个,因为它是哈希的一个键:fares。也许你需要一个像(左到最少元素)这样的数组:

a = {:id=>"1",
    :fares=>{
      :itinerary_fares=>[{:@price=>"439"}, {:@price=>"1000"}]
    }
}

进而:

a[:fares][:itinerary_fares].each do |f|
    puts f[:@price]
end
于 2012-05-10T21:11:14.297 回答