首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >呈现Jbuilder模板并将字符串赋值给gon

呈现Jbuilder模板并将字符串赋值给gon
EN

Stack Overflow用户
提问于 2013-12-10 20:56:45
回答 2查看 1.5K关注 0票数 4

Gon与Jbuilder合作得很好。特别是,文档告诉我们要像这样使用它

代码语言:javascript
复制
gon.jbuilder template: 'path/to/template.json.jbuilder'

这很好,但是我想缓存模板结果,这样就不需要重新呈现模板了。因此,我使用render_to_string,如下所示:

代码语言:javascript
复制
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中。

知道怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-14 17:03:36

现在看来,您可以使用Jbuilder轻松地进行片段缓存了。下面是我在jbuilder的源代码中找到的一个例子:

示例:

代码语言:javascript
复制
json.cache! ['v1', @person], :expires_in => 10.minutes do |json|
  json.extract! @person, :name, :age
end

将此应用于您的代码,我们将在控制器中保留以下代码:

代码语言:javascript
复制
gon.jbuilder template: 'path/to/template.json.jbuilder'

然后,在jbuilder视图中,我们将执行片段缓存:

代码语言:javascript
复制
#path/to/template.json.jbuilder
json.cache! ['v1', @model], :expires_in => 10.minutes do |json|
  #your template.json.juilder code in here
end

如果有帮助请告诉我!

票数 1
EN

Stack Overflow用户

发布于 2016-11-10 19:20:46

render_to_string更改content_type以进行后续呈现时存在一些问题。请参阅:https://github.com/rails/rails/issues/14173

一些可能的解决办法是

  • 在调用呈现时显式设置content_type,例如render content_type: text/html
  • 在调用content_type之后,显式地设置响应的render_to_string。如果您要将render_to_string放入控制器助手方法中,并且不希望要求调用助手方法的人注意到这种奇怪之处,那么这个选项可能是首选的。例如response.headers["Content-Type"] = request.format.to_s
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20505035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档