2010-09-30 16 views
6

Gerekli html'yi oluşturmak için Rails (3.0) uygulamasında özel bir yardımcı yöntem kullanarak bir sorun yaşıyorum. Raylar Yardımı Görüntüle HTML'yi Sayfa İçermiyor Sayfa

Ben benim kısmi görünümünde aşağıdaki çağrı:

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

amaçlanan çıkışı:

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

Ve resource_helper.rb dosyasında _label.html.erb

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

*, biçimlendirme olmadan ve 15 rasgele olarak verilir

Yöntem çağrısı gerçekleştirilirken <% = ...%> kullanırsam, dizeyi doğru olarak gönderir, ancak html olmaz (yani "Diamond 15'in aksine "<tr><td>Diamond </td><td>15%</td></tr>" göreceğim % ")

Neyi yanlış yapıyorum?

+0

Ana nedeni <%=...%> kullansaydım dizgiyi çıkarırdı, ancak asıl dize olurdu (şimdi XSS ve diğer güvenlik açığı türlerini önlemek için artık rayların varsayılan davranışı) – klew

+0

'arasında' kullandıkları için bu baskı değil neden – MunkiPhD

cevap

7

Sen dize "raw" olarak geri döndü işaretlemek ve sonra <% kullanmaya gerek =%>

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 
Eğer <% %> `yerine <%= %>`
+0

Bir uygulamayı Rails 3'e yeni taşıdım ve sormak istiyorum: Rails 3'ün HTML Safe dizelerini nasıl ele aldığı konusunda yeni bir davranış bu, doğru mu? – Robbie

+0

@Robbie - İnanıyorum - bu yüzden neden bu sorunu yaşadım (ama bunu nasıl düzelteceğimi bilmiyordum. Yardım için teşekkürler Rob! – MunkiPhD

+0

Evet, bu yeni yol rayları metin oluşturuyor. <%= .. %> kaçtı ve görüntülenmesi gereken bazı html varsa raw() kullanmanız gerekiyor – danengle