0

fooビューでヘルパー関数を使用します。

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

Whenfooは次のように定義されます。

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期待される結果を得るには、上記の定義をどのように修正しますか? (つまり、文字をエスケープしたくない)

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 に関して疑いの余地はありません。

したがって、イニシャライザ文字列が安全であることをレールに伝える問題を解決できます。

def foo(arr)
  result = ''.html_safe
  arr.each do |a|
    result += content_tag(:div, a)
  end
  result
end
于 2011-05-08T13:04:54.827 に答える