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已经完成,贡变量具有期望值,但突然之间,页面不再以HTML的形式显示在Chrome中。
知道怎么解决这个问题吗?
发布于 2013-12-14 17:03:36
现在看来,您可以使用Jbuilder轻松地进行片段缓存了。下面是我在jbuilder的源代码中找到的一个例子:
示例:
json.cache! ['v1', @person], :expires_in => 10.minutes do |json|
json.extract! @person, :name, :age
end将此应用于您的代码,我们将在控制器中保留以下代码:
gon.jbuilder template: 'path/to/template.json.jbuilder'然后,在jbuilder视图中,我们将执行片段缓存:
#path/to/template.json.jbuilder
json.cache! ['v1', @model], :expires_in => 10.minutes do |json|
#your template.json.juilder code in here
end如果有帮助请告诉我!
发布于 2016-11-10 19:20:46
render_to_string更改content_type以进行后续呈现时存在一些问题。请参阅:https://github.com/rails/rails/issues/14173
一些可能的解决办法是
content_type,例如render content_type: text/htmlcontent_type之后,显式地设置响应的render_to_string。如果您要将render_to_string放入控制器助手方法中,并且不希望要求调用助手方法的人注意到这种奇怪之处,那么这个选项可能是首选的。例如response.headers["Content-Type"] = request.format.to_shttps://stackoverflow.com/questions/20505035
复制相似问题