1

Rails 3 を使用しています。ヘルパーでこれを実行しようとしています。

def headers collection
  collection.each do |col|
     content_tag(:th, col.short_name)
  end
end

ご覧のとおり、これは content_tag を<th>実行してコレクション内の各要素のタグを生成するという考え方です。HTMLはRailsによって安全に作成されているため、HTMLとして機能しないため、これは機能しません。

これを次のように変更すると:

def headers collection
  collection.each do |col|
    concat (content_tag(:th, col.short_name))
  end
end

これはよりうまく機能します。HTML で正しいマークアップを取得しますが、その前にすべてのマークアップ HTML を安全に取得します。だから私は近いと思います。

これを行うには他の方法があることは知っていますが、正しいエレガントな方法でこれを行いたいと思いました。私は何が欠けていますか?

4

2 に答える 2

1

inject を使用して、html_safe の空の文字列から開始できます。

def headers collection
  collection.inject("".html_safe) do |content, col|
    content + (content_tag(:th, col.short_name))
  end
end
于 2012-08-24T22:43:38.857 に答える