2012-01-10 13 views
10

उदाहरण हैशहैश कुंजी प्राप्त करें और स्ट्रिंग माणिक में तब्दील

hash = {:key => ["val1", "val2]} 

जब मैं रेल 3.0.7 पर ऐसा किया, यह ठीक था।

> hash.keys.to_s 
=> "key" 
> hash[hash.keys.to_s] 
=> ["val1", "val2"] 

लेकिन अगर मैं रेल 3.1.3 के साथ ऐसा करता हूं, तो यह नहीं है।

> hash.keys.to_s 
=> [\"key\"] 
> hash[hash.keys.to_s] 
=> nil 

क्या रेल संस्करण का कारण बदल गया है? और क्या हैश कुंजी को एक स्ट्रिंग में बदलने का कोई अन्य तरीका है जो दोनों संस्करण (या रेल 2 के साथ) के साथ काम करता है?

+1

Fwiw, वर्तमान व्यवहार अधिक सही है, और उत्तर बड़े पैमाने पर स्वयं स्पष्ट है: "कुंजी" बहुवचन है, और एक संग्रह होना चाहिए। –

+0

हां डेव, मुझे यह ध्यान देना चाहिए। याद दिलाने के लिए शुक्रिया !!! –

उत्तर

15

क्या आपने रूबी के साथ-साथ रेल को अपग्रेड किया था? मुझे लगता है कि यह एक परिवर्तन 1.8 और 1.9

के बीच hash.keys.first.to_s का प्रयास करें (अगर वहाँ हमेशा सिर्फ एक ही चाबी) या hash.keys.join

+0

आह, हाँ। मैं आपको यह बताना भूल गया था कि वे [email protected] और [email protected] –

+0

आपके दोनों उत्तर काम कर रहे हैं। Thx दोस्त !! उत्तर के लिए –

3

आप बस यह एक स्ट्रिंग जो अधिक सही किया जा रहा है के बजाय एक प्रतीक को बदलने की आवश्यकता है:

hash[hash.keys.to_sym] 
+0

Thx लेकिन यह रूबी 1.9.2, रेल 3.1.3 पर काम नहीं कर रहा है। hash.keys.to_sym दिखाएगा और त्रुटि, अपरिभाषित विधि 'to_sym' के लिए [: key]: ऐरे –

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