2010-11-17 7 views
66

मैं कुछ इस तरह बनाने के लिए एक कस्टम सहायक में घोंसला सामग्री टैग करने के लिए कोशिश कर रहा हूँ,:Rails- नेस्टेड content_tag

<div class="field"> 
    <label>A Label</label> 
    <input class="medium new_value" size="20" type="text" name="value_name" /> 
</div> 

ध्यान दें कि इनपुट विधि से संबद्ध नहीं है, यह जावास्क्रिप्ट के माध्यम से सहेजा जाएगा ।

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

module InputHelper 
    def editable_input(label,name) 
     content_tag :div, :class => "field" do 
      content_tag :label,label 
      text_field_tag name,'', :class => 'medium new_value' 
     end 
    end 
end 

<%= editable_input 'Year Founded', 'companyStartDate' %> 

हालांकि, लेबल प्रदर्शित नहीं किया जाता है जब मैं सहायक कहते हैं, केवल इनपुट प्रदर्शित होता है। अगर यह text_field_tag ​​पर टिप्पणी करता है, तो लेबल प्रदर्शित होता है।

धन्यवाद!

उत्तर

135

आप त्वरित सुधार करने के लिए एक + जरूरत है: डी

module InputHelper 
    def editable_input(label,name) 
    content_tag :div, :class => "field" do 
     content_tag(:label,label) + # Note the + in this line 
     text_field_tag(name,'', :class => 'medium new_value') 
    end 
    end 
end 

<%= editable_input 'Year Founded', 'companyStartDate' %> 

content_tag :div के ब्लॉक के अंदर, केवल पिछले लौटे स्ट्रिंग प्रदर्शित किया जाएगा।

+1

टाइपो (टिप्पणी में केवल, लेकिन थोड़ा भ्रमित) - "नहीं * ई * इस पंक्ति में +" – Chowlett

+0

जोड़ने के बाद में है कि, मैं सिंटेक्स त्रुटि मिलती है: सिंटैक्स त्रुटि, अप्रत्याशित tIDENTIFIER, KDO या '{' या '(' \t \t text_field_tag ​​नाम उम्मीद, ',: वर्ग =>' मध्यम new_value ' \t \t^ – christo16

+0

मैंने जवाब अपडेट किया, यह ठीक है या नहीं। – PeterWong

42

तुम भी concat विधि का उपयोग कर सकते हैं:

module InputHelper 
    def editable_input(label,name) 
    content_tag :div, :class => "field" do 
     concat(content_tag(:label,label)) 
     concat(text_field_tag(name,'', :class => 'medium new_value')) 
    end 
    end 
end 

स्रोत: Nesting content_tag in Rails 3

+0

यह तब तक मेरे लिए काम करता था जब तक कि कॉन्सट लाइन 1 लाइन पर थी। मैंने इसके साथ लंबे समय तक खेल नहीं लगाया, हालांकि, शायद इसे बहु-लाइन – TerryS

+0

करने का कोई तरीका है, यह html_safe समस्या पर विचार करने का एक बेहतर तरीका होगा। गैर-htmlsafe स्ट्रिंग के बीच '+' का उपयोग करके सब कुछ गैर-htmlsafe बना देगा –

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