[英]Rails: link_to method
我有這樣的事情:
<p>
<b>Tags:</b>
<%if @post.tags.count > 0%>
<%= @post.tags.collect {|c| (link_to c.name, c)}.join(", ")%>
<%else%>
Does not have any tags.
<%end%>
</p>
這給了我
Tags: <a href="/tags/1">Java</a>, <a href="/tags/2">CSS</a>
而不是Java和CSS鏈接。 我想念什么?
這是因為默認情況下,Rails 3中的字符串不被認為是HTML安全的。 請參閱此博客文章 。
您可以通過調用.html_safe
手動將其標記為安全,這將使您的代碼如下所示:
<p>
<b>Tags:</b>
<%if @post.tags.count > 0%>
<%= @post.tags.collect {|c| (link_to c.name, c)}.join(", ").html_safe %>
<%else%>
Does not have any tags.
<%end%>
</p>
但我建議改為這樣做:
<p>
<b>Tags:</b>
<% if @post.tags.count > 0%>
<% @post.tags.each_with_index do |tag, i| %>
<%= link_to h(tag.name), tag %><%= ', ' if i < @post.tags.size - 1 %>
<% end %>
<% else %>
Does not have any tags.
<%end%>
</p>
我認為html_safe是您想要的! 因此,這可以解決問題(@ post.tags.collect {| c |(link_to c.name,c)}。join(“,”))。html_safe
我認為您的標簽名稱應該由用戶輸入,對嗎?
在這種情況下, html_safe
不是您的首選,因為它完全信任用戶。 並且您的站點將受到XSS攻擊。
更好的選擇應該是sanitize
。 請參閱此處的參考: http : //api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html
當您只想擁有鏈接時,以下行即可滿足您的需求:
<%= sanitize @post.tags.collect {|c| (link_to strip_links(c.name), c)}.join(", "), :tags => %w(a) %>
注意使用strip_links(c.name)
,這將刪除用戶輸入的所有鏈接。
假設標簽名稱為:[“產品”,“ 嗨 ”,“再見”]
通過僅使用.html_safe
,將顯示以下內容:
<a href="/tags/1">Product</a>, <a href="/tags/2"><strong>hi</strong></a>, <a href="/tags/3"><a href='bad_site.com'>bye</a></a>
但是,將sanitize與strip_links混合使用,結果如下:
<a href="/tags/1">Product</a>, <a href="/tags/2"><strong>hi</strong></a>, <a href="/tags/3">bye</a>
或者,您可以將strip_tags
與.html_safe
混合使用:
<%= @post.tags.collect {|c| (link_to strip_tags(c.name), c)}.join(", ").html_safe %>
只需在調用c.name
之前刪除c.name
中的所有標簽即可。
我建議(您可能已經在:D了)在存儲到數據庫之前刪除所有不需要的標簽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.