2010-09-30 11 views
6

Mam problem z użyciem niestandardowej metody pomocnika w mojej aplikacji Rails (3.0) do wyprowadzenia wymaganego html.Railsy Wyświetl pomocnik nie wstawiający HTML do strony

mam następujące wywołanie w moim częściowym widokiem: _label.html.erb

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

iw pliku 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 

Zamierzony wyjściowy:

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

* przyznano, bez formatowania, a 15 jest arbitralne

Jeśli użyję <% = ...%> podczas wykonywania wywołania metody, to wypisze ciąg poprawnie, ale nie będzie to html (tzn. Zobaczę "<tr><td>Diamond </td><td>15%</td></tr>" w przeciwieństwie do "Diament 15" % ")

Co robię nieprawidłowo?

+0

Głównym powodem, dlaczego nie jest to druk ponieważ używasz '<% %> zamiast' 'z' <%= %> – klew

+0

Gdybym użył <%=...%>, wyprowadziłby ciąg, ale byłby to rzeczywisty ciąg (jak to jest domyślne zachowanie szyn teraz - aby zapobiec XSS i innym rodzajom luk w zabezpieczeniach, które mogłyby powstać) – MunkiPhD

Odpowiedz

7

Trzeba zaznaczyć ciąg zwracany jako "raw", a następnie użyć <% =%>

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

Właśnie zmigrowałem aplikację do Rails 3 , i chciałbym zapytać: to jest nowe zachowanie w sposobie, w jaki Rails 3 traktuje bezpieczne ciągi HTML, prawda? – Robbie

+0

@Robbie - wierzę w to - dlatego mam ten problem (ale nie wiedziałem, jak to naprawić.) Dzięki za pomoc Rob! – MunkiPhD

+0

Tak, to nowy sposób, w jaki szyny renderują tekst. Domyślnie cały tekst renderowany między <%= .. %> jest escaped i musisz użyć raw(), jeśli masz jakiś html, który musi być wyświetlony – danengle

Powiązane problemy