2012-02-28 15 views
8

मैं एक सक्रियrecord ऑब्जेक्ट के लिए गतिशील रूप से एक विशेषता मान कैसे प्राप्त करूं?गतिशील रूप से ऑब्जेक्ट की विशेषता प्राप्त करें

उदाहरण के लिए मेरे पास attr_name नामक एक चर है।

person = Person.find(1) 
attr_name = "address" 
address = person.<function_name>(attr_name) 

जो function_name इस्तेमाल किया जा सकता:
मैं कुछ इस तरह करना चाहते हैं?

उत्तर

3

send वह तरीका है जिसे आप ढूंढ रहे हैं।

+4

का उपयोग कर के आधार जहां फ़ंक्शन नाम आता है इस से काफी खतरनाक हो सकता है यह कर, तो मैं उस –

22

या तो person.attributes[attr_name] या person.read_attribute(att_name) का उपयोग करें, या इससे भी कम तो यह person[attr_name] है।

+3

यह सबसे सुरक्षित और सही तरीका है नहीं मारूंगा। ध्यान दें कि यह केवल गुणों के लिए काम करेगा, अन्य तरीकों या संगठनों के लिए नहीं। –

+0

'ऑब्जेक्ट [प्रतीक या स्ट्रिंग]' वाक्यविन्यास के साथ विशेषताओं या विधियों को पाने में असमर्थ। एक सरल वर्ग बनाएं और इसे देखने के लिए पहले डॉट सिंटैक्स के साथ कुछ परिवर्तनीय या विधि सार्वजनिक रूप से सुलभ बनाएं, फिर इसे प्रतीक या स्ट्रिंग के माध्यम से एक्सेस करने का प्रयास करें .. कोई काम नहीं। –

+0

'' ' वर्ग फू डीईएफ़ @foo = 'foo नाम' @bar = 'बार नाम' अंत डीईएफ़ foo @foo अंत अंत foo = Foo.new foo प्रारंभ [: foo] '' ' –

1

तो send

address = person.send("function_name" + "attr_name") 
संबंधित मुद्दे