0

御時間ありがとうございます!

私はRailsが初めてで、少し混乱していview helperます。

で関数を定義しましたhelpers/application_helper.rb

def error_table()
  return %{<table>...</table>}
end

error_tableで関数を呼び出しましたshow.html.erb

<%= error_table() %>

しかし、このページを表示すると、この文字列が表示されます<table>...</table>

HTMLソースコードを表示すると、次のようになります。&lt;table&gt;...&lt;/table&gt;

このテーブルを表示する代わりに、html ページに挿入したいと考えています。私は何をすべきか?

4

2 に答える 2

3

Rails はデフォルトで、レンダリングされるすべての文字列を HTML エスケープするため、XSS 攻撃は不可能です。

したがって、あなたの場合.html_safe、文字列を呼び出して「安全な」HTMLとしてマークし、エスケープされないようにするかraw()、同じことを行うがnilオブジェクトに吠えないヘルパーに渡す必要があります。(私はこの陳腐さについて少し前に書きました)

あなたの場合、そのコードをヘルパー内に配置することをお勧めします。

def error_table()
  return %{<table>...</table>}.html_safe
end

または

def error_table()
  return raw(%{<table>...</table>})
end

そうすれば、すべての呼び出しサイトでこれを行う必要はありません

于 2012-11-26T09:21:07.000 に答える
1

これを試して:

<%=raw error_table() %>

Rails 3.0 以降、 <%= %> はデフォルトで HTML をエスケープします。

于 2012-11-26T09:20:57.380 に答える