即使我使用raw
或html_safe
,我也难以对输出进行编码。
这是在我的最终HTLM页面中写出 
。
def build_tag_cloud(tag_cloud, style_list)
tag_cloud.sort!{ |x,y| x.permalink <=> y.permalink }
max, min = 0, 0
tag_cloud.each do |tag|
max = tag.followers.to_i if tag.followers.to_i > max
min = tag.followers.to_i if tag.followers.to_i < min
end
divisor = ((max - min) / style_list.size) + 1
html = ""
tag_cloud.each do |tag|
name = raw(tag.name.gsub('&','&').gsub(' ',' '))
link = raw(link_to "#{name}", {:controller => "/shows", :action => "show", :permalink => tag.permalink}, :class => "#{style_list[(tag.followers.to_i - min) / divisor]}")
html += raw("<li>#{link}</li> ")
end
return raw(html.to_s)
end
使用raw
和html_safe
时允许哪些内容?我的上面例子应该如何解决?
答案 0 :(得分:3)
此代码来自哪个类? raw
方法是在帮助器上声明的,因此它只能在控制器和视图上使用。
来源:raw vs. html_safe vs. h to unescape html
此外,除非此方法在视图页面上(这只是Rails的MVC的不良实现),否则您无法使用link_to
函数。该助手仅适用于视图。此外,您不需要在此功能中重复调用raw。我认为你可以这样做:
def build_tag_cloud(tag_cloud, style_list)
...
html = ""
tag_cloud.each do |tag|
name = tag.name.gsub('&','&').gsub(' ',' ')
html += "<a href='#{shows_show_path(tag.permalink)}' class='#{style_list[(tag.followers.to_i - min) / divisor]}'>#{name}</a>"
end
html.html_safe
end
答案 1 :(得分:1)
raw和html_safe方法都专门告诉rails 不要 转义输出(raw是首选,并且避免使用显式的to_s)。
raw Reference
html_safe Reference
我怀疑你使用raw的原因是因为li标签。我建议使用内容标记助手。那么你根本不需要乱用编码。您可能需要将link_to方法直接放入content_for:li以使链接正常工作(我会先试试)。