2011-10-03 7 views
5

मैंरूबी के साथ हैश में कई इंस्टेंस चर बदलने के लिए बेहतर तरीका?

#<Response:0x000... @first = "Charlie", @last=Kelly, .... 

के प्रारूप में एक प्रतिक्रिया हो रही है और मैं (सक्रिय व्यापारी के लिए) एक हैश में इस बंद करना होगा। वर्तमान में मैं चर के माध्यम से पाशन कर रहा हूँ और यह कर:

response.instance_variables.each do |r| 
    my_hash.merge!(r.to_s.delete("@").intern => response.instance_eval(r.to_s.delete("@"))) 
end 

यह काम करता है, यह {:first = "charlie", :last => "kelly"} उत्पादन होगा, लेकिन यह एक सा hacky और अस्थिर लगता है। क्या ऐसा करने के लिए इससे अच्छा तरीका है ?

संपादित करें: मुझे अभी एहसास हुआ कि मैं उस समीकरण के दूसरे भाग के लिए example_variable_get का उपयोग कर सकता हूं, लेकिन यह अभी भी मुख्य समस्या को छोड़ देता है।

उत्तर

9

रेल के पास Object पर instance_values नामक एक विधि है। यहां code on GitHub है।

class C 
    def initialize(x, y) 
    @x, @y = x, y 
    end 
end 

C.new(0, 1).instance_values # => {"x" => 0, "y" => 1} 
C.new(0, 1).instance_values.symbolize_keys # => {:x => 0, :y => 1} 
+0

क्या कोई तरीका है कि मैं स्ट्रिंग के बजाय प्रतीक में पहला मान मजबूर कर सकता हूं? मैं इसे प्राप्त करने वाले कोड को स्पर्श नहीं कर सकता, और तार काम नहीं कर रहे हैं। – cbron

+0

निश्चित रूप से, '.symbolize_keys': 'obj.instance_values.symbolize_keys' आपको जाना चाहिए! –

+0

ओ सही आदमी। मैंने उस example_values ​​विधि को फिर से लिखना शुरू कर दिया लेकिन यह आसान तरीका है। ग्रेजी। – cbron

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