这是我的帖子/ index.html.erb文件的代码:
<!--
Iterate over each post in list format
-->
<% @posts.each do |post| %>
<ul class="posts">
<!--
Link to article, display date created, show edit, delete links if logged in
-->
<li><%= link_to "#{post.title}".html_safe, post, id: "article" %></li>
<li id="date"> <%= post.created_at.strftime("%B %Y") %></li>
<% if logged_in? %>
<li>
<%= link_to 'Edit', "/editor" + post_path(post), id: "edit_delete", data: {save_url: mercury_update_post_path(post)} %>
<%= link_to 'Delete', post, id: "edit_delete", :method => :delete %>
</li>
<% end %>
</ul>
<% end %>
在我的本地开发和生产环境中,关联的css样式表和html在浏览器中正确编译和呈现。但是,当我将此代码部署到heroku时,它会添加一些我之前删除的旧HTML,如页面源代码所示:
<!--
Iterate over each post in list format
-->
<ul class="posts">
<!--
Link to article, display date created
-->
<li> <a href="/posts/5" id="article"><b>Endurance Exercise is Bad for your Health?</b>
<div><b><br></b></div></a> </li>
<li id="date"> February 2013 </li>
<!--
Show edit, delete links if logged in
-->
</ul>
请参阅链接标记中嵌入的<div><b><br></b></div>
标记“耐力运动对您的健康有害吗?” ......任何人都知道为什么在生产时部署到heroku时会把它放在那里?
答案 0 :(得分:1)
这是你的罪魁祸首。 "#{post.title}".html_safe
您要显示的其中一个帖子标题中包含html标记。将.html_safe
调用到用户输入的任何内容都是一个坏主意。您应该使用h(post.title)
转义它,或者首先清除字符串以接受标记。查看sanitize helper