23

我用 JBuilder 创建了一个 json 视图。但我想将其预加载到数据对象中,因此 Backbone 可以尽早访问数据而无需获取它。

如何将 list.json.jbuilder 视图呈现到我的 list.html.erb 视图中?

通常没有jbuilder,我会做这样的事情:

<div data-list="<%= @contents.to_json %>"></div>
4

1 回答 1

22

render,当从视图中调用时,返回传递的模板或部分模板的字符串呈现;您可以根据需要将该字符串嵌入到您的视图中。请注意:

  • 您必须使用类型后缀/扩展名附加您的模板名称。如果你不这样做,Rails 可能会对你调用的模板文件感到困惑。即:它可能会选择list.html.erb而不是list.json.jbuilder. 如果您 list.html.erb进行此调用,则尝试渲染list.html.erb会导致无限递归和 SystemStackError。使用:format选项render似乎不起作用。
  • 您必须指定模板的限定路径;它不会为“list.json”找到正确的模板,因为它与 .jsonlist.json.jbuilder位于同一目录中list.html.erb
  • 您需要通过;传递render调用的输出。raw否则,当它嵌入到视图中时,它将被转义。

因此,对于您的示例,假设您的模板位于/app/views/foo

<div data-list="<%= raw render(:template => "foo/list.json", :locals => { :contents => @contents }) %>"></div>
于 2014-12-11T22:20:48.860 回答