2013-02-03 17 views
11

मैं एक साधारण_फॉर्म एसोसिएशन के आउटपुट को कस्टमाइज़ करने की कोशिश कर रहा हूं, मूल रूप से मुझे दो लाइनों पर एक चेकबॉक्स लेबल प्रदर्शित करने की आवश्यकता है। मेरा विचार "लेबल" में एक "br" टैग जोड़ने था, लेकिन दुर्भाग्य से यह बजाय एक नई लाइनरेल - सरल HTML प्रारूप में कस्टम एचटीएमएल

मैं लेबल उत्पादन

अनुकूलित करने के लिए एक लैम्ब्डा उपयोग करने के लिए जाने का भाग निकले हो जाता है तो यह वास्तव में प्रदर्शित "br"
<%= f.association :item, :as => :check_boxes, :collection => current_user.items, :label => false, :label_method => lambda { |item| "#{item.city.capitalize},<br> #{item.address}" }%> 

यह लेबल स्ट्रिंग में एक बच निकला ब्रांड्स बनाता है, मैं लेबल को दो पंक्तियों पर कैसे प्रदर्शित कर सकता हूं?

उत्तर

27

कॉल html_safe विधि डीबग कर सकते हैं।

<%= f.association :item, :as => :check_boxes, :collection => current_user.items, :label => false, :label_method => lambda { |item| "#{item.city.capitalize},<br> #{item.address}".html_safe }%> 
+0

, धन्यवाद कि – Carlo

+0

काम आपका स्वागत है। :) –

+4

लगता है कि यह एक एक्सएसएस हमले के लिए कमजोर है। आपको उपयोगकर्ता इनपुट से बचने के लिए मजबूर होना चाहिए, यानी: '" # {h item.city.capitalize},
# {h item.address} "। Html_safe' – dskecse

2

html_safe मदद करता है?

<%= f.association(....).html_safe %> 

यदि नहीं, तो GitHub इस मुद्दे प्रदर्शन पर एक उदाहरण ऐप्लिकेशन पोस्ट, इसलिए हमने इसे स्ट्रिंग आप चाहते हैं बच गए होने की नहीं पर

10

आप में से उन के रूप में ओ पी के प्रश्न के शीर्षक से पता चलता तत्वों में कस्टम HTML है करने के लिए देख लिए, आप यह कर सकते हैं:

= f.input(:Foo, label: "Foo <span>(Blah helper text blah)</span>".html_safe) 
संबंधित मुद्दे