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 に答える