7

バックエンドでRailsを使用し、フロントエンドでjavascript/backboneを使用するアプリを作成しています。いくつかのRailsモデルをJavaScriptにブートストラップしようとしています。@courses具体的には、の内容をと呼ばれるjs変数にロードしたいと思いますwindow.courses。私はhtml.erbファイルに次のものを持っています。

<%= javascript_tag do %>
    window.courses = JSON.parse('<%= @courses.to_json %>');
<% end %>

erbプリプロセッサがこれを有効なJavaScriptにレンダリングすることを期待しています。

<script type="text/javascript">
//<![CDATA[
    window.courses = JSON.parse('[{"code":"myCourseCode", ...
//]]>
</script>

...しかし、代わりに、HTMLエンティティを含むコードを取得しています。

<script type="text/javascript">
//<![CDATA[
    window.courses = JSON.parse('[{&quot;code&quot;:&quot;myCourseCode&quot;, ...
//]]>
</script>

明らかに、これを解析しようとするとjavascriptエラーが発生します。

有効なJavaScriptを生成するためにこれらのHTMLエンティティを処理する方法を知っている人はいますか?1つのオプションは、クライアント側のエンティティをエスケープ解除することだと思いますが、これは回りくどい解決策のようです。Railsにエスケープを解除する必要のないJSONを生成させる方法はありますか?

4

2 に答える 2

9

raw(obj.to_json)を使用する場合は、以下が設定されていることを確認する必要があります。

ActiveSupport.escape_html_entities_in_json = true 
于 2013-02-02T19:56:51.027 に答える
5

質問は、記録のために、私のコメントによって解決されます:

Railsは、を使用して印刷された文字列をエスケープします<%= 'string' %>。これにより、ユーザーデータを出力するために保存されます。したがって、Railsが出力をエスケープしたくない場合は、を使用してRailsに明示的に通知する必要がありますraw('string')

あなたのコードでは、それは次のようになります: <%= raw(@courses.to_json) %>

于 2012-10-08T20:16:52.500 に答える