2010-03-06 7 views
8

मेरे पास गतिशील रूप है जिसमें मूल्यों का एक सेट है। मैंने एक आंशिक बनाया जिसमें टेक्स्ट फ़ील्ड शामिल हैं जो मैं प्रदर्शित करता हूं। उनमें से प्रत्येक के बगल में मैं पाठ का शीर्षक वाला एक लेबल प्रदर्शित करना चाहता हूं। उदाहरण के लिए पहला नाम, और अंतिम नाम पहले ज्ञात नहीं होगा। मैं इसे कैसे करूं? ऐसा लगता है कि मैं सीधे विशेषताओं तक नहीं पहुंच सकता। लेकिन जब मैं लेबल फ़ील्ड का उपयोग करता हूं, तो लेबल में परिवर्तनीय नाम वास्तविक मान प्रदर्शित नहीं होता है।फ़ील्ड_ डायनामिक लेबल

+0

क्या आप यह समझाने की कोशिश कर सकते हैं कि आप बेहतर क्या हासिल करना चाहते हैं? शायद एक उदाहरण दें? मैंने आपकी मदद करने के लिए समझने की कोशिश की है लेकिन मुझे समझ में नहीं आता कि आपको क्या चाहिए। – Petros

+0

मेरे पास एक ऑब्जेक्ट है जिसमें गतिशील फ़ील्ड {नाम, मान} के सेट के साथ एक से कई संबंध हैं। जब कोई उपयोगकर्ता गतिशील फ़ील्ड अपडेट कर रहा है, तो मैं हार्डकोड किए गए लेबल की बजाय फ़ील्ड का नाम वास्तविक लेबल के रूप में प्रदर्शित करना चाहता हूं। या एक पूर्वनिर्धारित स्ट्रिंग मान। गतिशील रूप आंशिक और सभी डेटा के अंदर है। स्निपेट्स: _form.erb <% f.fields_for: entity_values ​​do | builder | %> <% = "entity_value_fields" प्रस्तुत करें, f => बिल्डर%> <% अंत% _entity_value_fields.erb <% = f.label: name%> {लेबल को उस मान का गतिशील नाम होना चाहिए} <% = f.text_field: मान%> ... – sebajb

उत्तर

6

अच्छा! यह एक प्रतिबिंब था कि मैं रेल के लिए कितना नया हूं। आप f.object.{attr_name} का उपयोग करके ऐसा कर सकते हैं और यह काम करता है।

+0

आप इसका उपयोग कैसे करते हैं? आपके उदाहरण में वस्तु क्या होगी? –

5

f.object.{attr_name} मेरे लिए काम नहीं किया, लेकिन f.object[:attr_name] किया।

+1

'f.object.first_name' या' attr_name = 'first_name'; f.object.send (attr_name) 'काम करेगा। 'f.object। {attr_name}' अमान्य रूबी वाक्यविन्यास है। – Kris

2

के बारे में क्या:

f.object.send(attr_name) 

कि Rubyish तरीका होगा।

+0

क्या आप इसे बेहतर समझा सकते हैं? –

+2

सभी फॉर्म बिल्डर्स के पास 'ऑब्जेक्ट' नामक एक विधि होती है जो ऑब्जेक्ट देता है जो फॉर्म लपेटता है, आम तौर पर एक ActiveRecord मॉडल, व्यक्ति कहता है। इसके बाद हम उस व्यक्ति को एक संदेश भेजने के लिए 'प्रेषण' कहते हैं, इसलिए 'person.send (: name)' 'person.name' जैसा ही है। जैसा कि आप 'प्रेषण' का उपयोग करके देख सकते हैं, इसका मतलब है कि हमें विशेषता (जैसे last_name) को हार्डकोड करने की आवश्यकता नहीं है जिसे हम अपने लेबल के रूप में प्रदर्शित करना चाहते हैं। तो उपर्युक्त मामले में 'attr_name' कोई स्ट्रिंग हो सकता है, या तो last_name, first_name, जो कुछ भी हो। – Kris

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