我在使用 JSON 响应 json 请求时遇到问题,同时启用了动作缓存。
我有一个相当简单的控制器,它同时响应 JSON 和 HTML,并且缓存适用于 HTML 响应,但我注意到当我请求 JSON 时,通常会使用 JSON 响应,但启用动作缓存后,它将 JSON 输出包装在布局中!
当我清除缓存时,它给了我一个不存在默认布局的错误:
ClipsController#index 中的参数错误
ClipsController 在...中没有默认布局
如何为缓存的操作返回 JSON?
更新,我怀疑有关布局的错误与我缓存操作的方式有关:
caches_action :index, :layout => false
不过我不确定,为什么在 JSON 响应的情况下它仍然需要布局,因为没有缓存就没有问题。
暂时我已将缓存过滤器修改为不缓存 JSON 请求,但这不是一个理想的解决方法,如果我确实想缓存 JSON,我该怎么办?
caches_action :index, :layout => false, :if => Proc.new { |c| !c.request.format.json? }