アクションキャッシングを有効にしているときに、JSONでjsonリクエストに応答する際に問題が発生します。
JSONとHTMLの両方に応答する非常に単純なコントローラーがあり、キャッシュはHTML応答で正常に機能しますが、JSONを要求すると、通常はJSONで応答しますが、アクションキャッシュを有効にすると、JSON出力がレイアウトにラップされます。 !!
キャッシュをクリアすると、デフォルトのレイアウトが存在しないというエラーが表示されます。
ClipsController#indexのArgumentError
ClipsControllerのデフォルトのレイアウトはありませんでした...
キャッシュされたアクションのJSONを返すにはどうすればよいですか?
更新、レイアウトに関するエラーは、アクションをキャッシュする方法に関係していると思われます。
caches_action :index, :layout => false
ただし、キャッシュがなくても問題がないため、JSON応答の場合にレイアウトが必要になる理由はわかりません。
一時的に、JSONリクエストをキャッシュしないようにキャッシュフィルターを変更しましたが、これは理想的な回避策ではありません。JSONをキャッシュしたい場合はどうすればよいですか?
caches_action :index, :layout => false, :if => Proc.new { |c| !c.request.format.json? }