0

在我看来,我使用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>

但是,如果 changefoo的定义是:

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

我得到了预期的结果:

hello
stack
overflow

你将如何修正foo上面的定义以获得预期的结果?(即我不希望字符被转义)

4

1 回答 1

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
于 2011-05-08T13:04:54.827 回答