2012-05-10 20 views
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 यहाँ है।

कोड है कि मुझे headhaches देता है,

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

अगर मैं कंसोल में इस बारे में है, यह देता है मुझे "पूर्णांक में प्रतीक परिवर्तित नहीं कर सकते" त्रुटि। लेकिन अगर मैं लिखता हूं, a[:fares][:itinerary_fare][:@price] यह बहुत बढ़िया काम करता है।

अजीब हिस्सा है, अगर मैं एक haml फ़ाइल

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

उत्तर

8

a[:fares][:itinerary_fare] एक Hash है

मेरे डेटा दिखाया जा सकता है। ब्लॉक में Hash#eachyields key-value-pair arrays

तो, f उदा। ब्लॉक में सरणी [:@price, "439.0"]

इसलिए आप एक सरणी अनुक्रमणिका के रूप में एक प्रतीक (:@price) का उपयोग कर रहे हैं। एक पूर्णांक की उम्मीद है।

a[:fares][:itinerary_fare][:@price] में आप इसे हैश कुंजी के रूप में दे रहे हैं जो निश्चित रूप से काम करता है।

-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 
+1

मैं इसे नष्ट नहीं किया है, क्योंकि यह अपने दोस्तों के साथ तैनात किया गया था गलती से खाते में, किसी भी समस्याओं के लिए खेद है हो सकता है कि आप की तरह (तत्वों की कम से कम करने के लिए बाएं) एक सरणी की जरूरत है – gkaykck

संबंधित मुद्दे