在Rails 3中转义HTML字符的问题

时间:2011-05-08 13:02:00

标签: ruby-on-rails ruby-on-rails-3 escaping helpermethods

我在视图中使用foo辅助函数:

 <%= foo ["hello", "stack", "overflow"] %>

foo定义如下:

def foo(arr)
  result = ''
  arr.each do |a|
    result += content_tag(:div, a)
  end
  result
end

页面呈现:

<div>hello</div><div>stack</div><div>overflow</div>

但是,如果将foo的定义更改为:

def foo(arr)
  content_tag(:div, arr[0]) + content_tag(:div, arr[1]) + content_tag(:div, arr[2])
end

我得到了预期的结果:

hello
stack
overflow

您如何修复foo上面的定义以获得预期结果? (即我不想让角色逃脱)

1 个答案:

答案 0 :(得分:2)

试试这个:

def foo(arr)
  result = ''
  arr.each do |a|
    result += content_tag(:div, a)
  end
  raw result
end

编辑。

为了更清楚,你正在创建一个字符串,Rails不知道它是否可以安全显示。 更准确地说,Rails对它创建的content_tags毫无疑问。

所以你可以解决你的问题告诉rails你的初始化字符串是安全的:

def foo(arr)
  result = ''.html_safe
  arr.each do |a|
    result += content_tag(:div, a)
  end
  result
end