我的模型tag
的属性为title (string)
。
tag
属于_ document
与has_many :throught
关联的模型。
在文档#show视图中,我需要显示与该文档关联的所有标签,所以我这样做:
%p= raw @document.tags.map{|t| link_to t.title.prepend('#'), t}.join(', ')
考虑到用户可以创建标签,这是否安全?
如果不安全,我怎样才能达到相同的效果?
谢谢。
答案 0 :(得分:0)
通常,所有逻辑(或尽可能多的)都应该移动到帮助者或模型。我不会说这是“安全”或“不安全”,但总的来说这是一种良好的做法。
答案 1 :(得分:0)
是的,标签的标题在成为链接的内容之前将被转义,因此即使其中有HTML,它也会被渲染,而不是原始输出。在没有转义的情况下输出将输出的是join
产生的字符串,这很好。
答案 2 :(得分:0)
在这种情况下,它是安全的,因为link_to
将转义其参数,但为什么要承担风险(可能会在几个月内修改块的内部等等),使用{{ 1}}:
safe_join
或者使用我的rails_join
“gem”,您可以安全地执行%p= safe_join @document.tags.map{|t| link_to t.title.prepend('#'), t}, ', '
而无需join
。