2016-02-26 63 views
2

我對Contact型號以下的輔助方法:Rails的助手:換行添加到content_tag的helper方法內結束

def list_offices_if_present(contact) 
    if contact.locations.any? 
    content_tag :span, "Works out of: #{contact.offices_list}" + tag(:br) 
    end 
end 

這裏被稱爲是content_tag內的方法定義:

#models/contact.rb 
class Contact < ActiveRecord::Base 
    ... 
    def offices_list 
    offices_names = [] 
    locations.each{|location| office_names << location.office_name} 
    return office_names.join(", ") 
    end 
end 

我把這種幫助是這樣的:

<p> 
    <%= list_offices_if_present(@contact) %> 
    <%= list_phone_if_present(@contact) %> 
<p> 

的問題是,<br>標籤呈現出文本,而不是實際的換行,像這樣:

Works out of: Some Location <br /> Phone: 402-555-1234 

如何換行添加到helper方法內的content_tag的結束?

回答

1
content_tag(:span, "Works out of: #{contact.offices_list}" + raw("<br>")) 
1

Rails的自動轉義HTML實體,你可以使用:

content_tag :span, "Works out of: #{contact.offices_list}".html_safe + tag(:br) 
+0

謝謝!請問爲什麼'html_safe'是必要的? – Neil

+1

@Neil:在應用這個方法之後,不會執行額外的轉義,所以原始的html將被渲染而不是轉義的字符串。即'作品不符合:<...>
'而不是'作品不符合:<...> < br/>' – potashin

0

我覺得你的問題是下面的代碼行

content_tag :span, "Works out of: #{contact.offices_list}" + tag(:br) 

作爲

content_tag(:span, "Works out of: #{contact.offices_list}" + tag(:br)) 

通知tag(:br)執行作爲第二個參數連接到"Works out of: #{contact.offices_list}"

爲了解決這個問題,添加明確對括號中是這樣的:

content_tag(:span, "Works out of: #{contact.offices_list}") + tag(:br) 
相關問題