Ruby on rails Rails操作缓存和json响应

Ruby on rails Rails操作缓存和json响应,ruby-on-rails,json,memcached,Ruby On Rails,Json,Memcached,在启用操作缓存时,我在用JSON响应JSON请求时遇到问题 我有一个相当简单的控制器,它可以响应JSON和HTML,缓存可以很好地用于HTML响应,但我注意到,当我请求JSON时,通常会使用JSON进行响应,但是启用了action cache后,它会在布局中包装JSON输出 清除缓存时,会出现一个错误,即不存在默认布局: ClipsController#索引中的ArgumentError 在…中没有ClipsController的默认布局 如何为缓存的操作返回JSON 更新时,我怀疑布局错误与缓

在启用操作缓存时,我在用JSON响应JSON请求时遇到问题

我有一个相当简单的控制器,它可以响应JSON和HTML,缓存可以很好地用于HTML响应,但我注意到,当我请求JSON时,通常会使用JSON进行响应,但是启用了action cache后,它会在布局中包装JSON输出

清除缓存时,会出现一个错误,即不存在默认布局:

ClipsController#索引中的ArgumentError

在…中没有ClipsController的默认布局

如何为缓存的操作返回JSON

更新时,我怀疑布局错误与缓存操作的方式有关:

caches\u操作:索引,布局=>false

但是我不确定,为什么在JSON响应的情况下它仍然需要一个布局,因为没有缓存就没有问题

我暂时修改了缓存过滤器,不缓存JSON请求,但这不是一个理想的解决办法,如果我真的想缓存JSON,该怎么办


caches_action:index,:layout=>false,:if=>Proc.new{{c |!c.request.format.json}

似乎这实际上可能是操作缓存的一个错误,但可能有一些我不理解的地方

看看哪里出了问题。基本上,如果您将布局选项设置为false,它就不在乎了,并尝试使用布局来呈现它。

我遇到了类似的问题(通过ajax请求呈现HTML,布局设置为false,但存在)

这里有一个解决方法:创建一个空布局并使用它来服务ajax请求

# app/views/layout/empty.html.erb
<%= yield %>

# controller
class FooController ...
  layout Proc.new { |controller| controller.request.xhr? ? "empty" : "your normal html layout" }
  caches_action ...
end
#app/views/layout/empty.html.erb
#控制器
类控制器。。。
layout Proc.new{| controller | controller.request.xhr???“空”:“您的正常html布局”}
缓存操作。。。
结束

有趣的问题!我花了一些时间研究这个问题,它似乎是Rails 3中添加的一个bug。。。我无法让它正常工作,但提到在你的before_过滤器中放置layout:false,这可能会缓解你的问题。对不起,我帮不了你了,谢谢。您的解决方案为我的Rails 3.2.8应用程序带来了成功。我现在正在浏览器中缓存JS请求,只是添加了响应。控制器上的标题[“Cache Control”]=“max age=600,必须重新验证”和Jquery.Ajax请求中的“Cache:true”。我想当您想要具体返回json时,您已经尝试了
呈现json:
。您使用的rails版本是什么?这里的情况相同。看起来像只虫子。轨道3.2