4

Gon は Jbuilder とうまく連携します。特に、ドキュメントでは、このように使用するように指示されています

gon.jbuilder template: 'path/to/template.json.jbuilder'

これはうまく機能しますが、テンプレートの結果をキャッシュしたいので、テンプレートを再レンダリングする必要はありません。したがって、次render_to_stringのように使用しました。

gon.entities = Rails.cache.fetch('entities_json') do
  JSON.parse render_to_string(template: 'path/to/template.json.jbuilder')
end

このメソッドは適切な文字列を返します。JSON.parse を介して渡す必要があります。それ以外の場合、gon変数は二重にエンコードされた JSON 文字列を格納します。これは面倒ですが、他に解決する方法がわかりません。

残念ながら、この呼び出しrender_to_stringにより、HTML ページ全体が文字列としてレンダリングされます。HTML が完成し、gon 変数には期待される値が含まれていますが、突然、Chrome でページが HTML として表示されなくなりました。

これを解決する方法はありますか?

4

2 に答える 2

0

後続のレンダリングrender_to_stringのために を変更すると、いくつかの問題があります。content_type参照: https://github.com/rails/rails/issues/14173

いくつかの可能な回避策は次のとおりです。

  • content_typerender を呼び出すときに明示的に設定します。render content_type: text/html
  • content_typeを呼び出した後の応答に明示的に を設定しrender_to_stringます。render_to_stringこのオプションは、コントローラーのヘルパー メソッドを配置していて、ヘルパー メソッドを呼び出している人に奇妙さを認識させたくない場合に適しています。例えばresponse.headers["Content-Type"] = request.format.to_s
于 2016-11-10T19:20:46.110 に答える