2012-05-10 35 views
5

là băm Tôi đang làm việc trên,“không thể chuyển đổi Symbol vào Integer” lỗi lạ

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" 
    }, 
    #.. 
} 

cũng ở đây một ví dụ khác http://pastebin.com/ukTu8GaG.

Các mã mà mang lại cho tôi headhaches,

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

Nếu tôi viết những dòng này vào giao diện điều khiển, nó mang lại cho tôi "không thể chuyển đổi Symbol vào Integer" lỗi. Nhưng nếu tôi viết, a[:fares][:itinerary_fare][:@price] nó hoạt động khá tốt.

Phần kỳ lạ nhất là, nếu tôi viết mã vào một tập tin Haml

%tbody 
    [email protected]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 

Nó hoạt động, nó in giá để giao diện điều khiển của tôi, nhưng nó không thành công tại cùng một dòng.

can't convert Symbol into Integer file: flights.haml location: [] line: 18 

Đây là lỗi đáng lo ngại nhất mà tôi từng thấy, cảm ơn sự giúp đỡ nào.

Phần lớn thời gian có nhiều hơn 1 :itinerary_fare, tôi phải lặp lại.

dữ liệu của tôi có thể được hiển thị như http://postimage.org/image/6nnbk9l35/

Trả lời

8

a[:fares][:itinerary_fare] là một Hash. Hash#eachyields key-value-pair arrays vào khối.

Vì vậy, f có nghĩa là mảng [:@price, "439.0"] trong khối.

Do đó bạn đang sử dụng một biểu tượng (:@price) làm chỉ mục mảng. Một số nguyên được mong đợi.

Trong a[:fares][:itinerary_fare][:@price] bạn đang cung cấp cho nó dưới dạng khóa băm hoạt động trong khóa học.

-1

Tại sao bạn xóa câu hỏi trước, đã là chính xác được trả lời? Bạn chỉ có thể cập nhật nó với nhiều thông tin hơn. Như đã được trả lời bởi người dùng khác trong bài viết trước của bạn, bạn đang lặp qua các phần tử trong a[:fares][:itinerary_fare]. Bạn có thể thấy điều này với:

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

Và bạn không cần một vòng lặp, bạn có thể sử dụng:

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

Nếu bạn có nhiều hơn một: itinerary_fare nó sẽ chỉ xem xét cuối cùng, vì nó là một khóa của băm: giá vé. Có lẽ bạn cần một mảng tương tự (trái để tối thiểu các yếu tố):

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

và sau đó:

a[:fares][:itinerary_fares].each do |f| 
    puts f[:@price] 
end 
+1

tôi đã xóa nó bởi vì nó đã được đăng với bạn bè của tôi SO chiếm vô tình, xin lỗi vì bất kỳ vấn đề – gkaykck

Các vấn đề liên quan