2010-12-15 6 views
3

Ich habe eine RHTML-Ansicht in Rails, wo die Ausgabe von meiner MongoDB-Sammlung kommt. Die Daten werden korrekt unter Verwendung eines Iterationsblocks ausgegeben, aber wenn ich versuche, HTML-Tags in meiner Datenbank zu haben, werden sie nicht in der HTML-Ausgabe wiedergegeben, sondern sie werden nur angezeigt.RHTML zeigt HTML-Tags auf Ausgabe an

<% 
@posts.find().each do |post| 
%> 
<h1><%=post["name"]%></h1> 
<p><%=post["body"] %></p> 
<p><%=post["timestamp"]%></p> 
<% 
end 
%> 

Aber zum Beispiel, wenn ich in meiner Datenbank, würden die Tags gerendert, anstatt dass sie gedruckt

<p>Test</p> 

hatte.

+0

Sie sollten die 'finden() nicht brauchen' nach @posts –

+0

wenn @posts a Sammelobjekt er tut –

Antwort

6

Dies ist eine Sicherheitsvorkehrung, die jetzt in Rails 3 integriert ist. Es verhindert XSS (Cross-Site Scripting) Probleme.

Wenn Sie raw hinzufügen, erhalten Sie die gewünschte Ausgabe.

<% @posts.each do |post| %> 
<h1><%=raw post["name"]%></h1> 
<p><%=raw post["body"] %></p> 
<p><%=raw post["timestamp"]%></p> 
<% end %> 

Wenn Sie jedoch vom Benutzer erstellten beliebigen HTML speichern, ich empfehlen Sie dies nicht tun, wenn Sie die Eingabe sind desinfizierende bevor sie in der Datenbank zu speichern.

Edit:

Eine weitere Option: Mit dem sanitize helper anstelle von raw, z.B. <%=sanitize post["name"], :tags => "p" %> erlauben <p> Tags.