2010-09-30 19 views
6

मुझे आवश्यक रेल आउटपुट के लिए मेरे रेल (3.0) ऐप में एक कस्टम सहायक विधि का उपयोग कर कोई समस्या है।रेल देखें हेल्पर एचटीएमएल डालने में एचटीएमएल डालने में पेज

मेरे पास है मेरे आंशिक दृश्य में निम्नलिखित कॉल: _label.html.erb

<% display_resource "Diamond", @resource.diamond %> 

और resource_helper.rb फ़ाइल में:

module ResourceHelper 
    def display_resource(display_name, value) 
     "<tr><td>#{display_name} </td><td>#{value.to_s}%</td></tr>" if value > 0 
    end 
end 

इरादा उत्पादन होता है:

<tr> 
    <td>Diamond</td> 
    <td>15%</td> 
<tr> 

* स्वरूपण के बिना, और 15 मनमाने ढंग से

यदि मैं <% = ...%> विधि कॉल करते समय उपयोग करता हूं, तो यह स्ट्रिंग को सही तरीके से आउटपुट करेगा, लेकिन यह HTML नहीं होगा (यानी मैं "<tr><td>Diamond </td><td>15%</td></tr>" "डायमंड 15 के विपरीत % ")

मैं गलत तरीके से क्या कर रहा हूं?

+0

मुख्य कारण है कि यह मुद्रण नहीं है क्योंकि आप '' <% %> बजाय '' <%= %> – klew

+0

का उपयोग करें अगर मैंने <%=...%> का उपयोग किया था तो यह स्ट्रिंग आउटपुट करेगा, लेकिन यह वास्तविक स्ट्रिंग होगी (क्योंकि यह अब रेल का डिफ़ॉल्ट व्यवहार है - XSS और अन्य प्रकार के सुरक्षा छेद जो उत्पन्न हो सकता है) – MunkiPhD

उत्तर

7

आप स्ट्रिंग के रूप में "raw" लौटे चिह्नित करने के लिए और फिर <% का उपयोग की जरूरत है =%>

module ResourceHelper 
    def display_resource(display_name, value) 
     raw("<tr><td>#{display_name} </td><td>#{value.to_s}%</td></tr>") if value > 0 # string wrapped in raw 
    end 
end 
+0

मैंने बस एक ऐप को रेल 3 पर माइग्रेट किया , और मैं पूछना चाहता हूं: यह एक नया व्यवहार है कि कैसे रेल 3 एचटीएमएल सेफ स्ट्रिंग का इलाज करता है, सही? – Robbie

+0

@ रोबबी - मुझे विश्वास है - इस प्रकार मुझे यह समस्या क्यों मिली (लेकिन यह नहीं पता था कि इसे कैसे सुधारें। मदद के लिए धन्यवाद रॉब! – MunkiPhD

+0

हां, यह नया तरीका रेल है जो पाठ प्रस्तुत करता है। डिफ़ॉल्ट रूप से, सभी पाठ <%= .. %> बच निकला है और आपको कच्चे() का उपयोग करने की आवश्यकता है यदि आपके पास कुछ HTML है जो प्रदर्शित होने की आवश्यकता है – danengle

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