我想在一个请求中返回html片段和json数据。 (编辑:我承认最简单的解决方案就是将请求分成两部分。但如果有一种方法我想尝试。)所以控制器操作中的代码如下:
format.json {
html = render html: { partial: 'shops/search/result_block.html', locals: { shops: @shops, conditions: @conditions } }
json = render json: 'shops/search.json'
render json: { html: html, json: json }
}
如果我这样做,铁路警告就像下面一样:
在此操作中多次调用渲染和/或重定向。 请注意,您最多只能调用渲染或重定向 每次行动一次。另请注意,重定向和渲染都不会终止 执行动作,所以如果你想在之后退出动作 重定向,你需要做一些像“redirect_to(...)和 返回”。
行。我理解这些方法不仅仅是从模板引擎中渲染字符串。
我认为我需要的是: 直接调用渲染引擎的方法或利用渲染引擎的核心功能 - 只需要将格式化的输出作为字符串。然后只需将结果作为JSON返回。但是如何?!
答案 0 :(得分:2)
在render_to_string
和HTML
这两种情况下都需要使用JSON
,Render
只能在您的操作中使用一次,否则您将获得double render error
}:
html_data = render_to_string(partial: 'shops/search/result_block.html', :layout => false, :locals => { shops: @shops, conditions: @conditions })
json_data = render_to_string(partial: 'shops/search.json')
render json: { html: html_data, json: json_data }
检查Here
答案 1 :(得分:0)
您无法多次渲染
如果您决定渲染json格式,则无法在其中插入任何html。
只有当你的所有html都在这样的字符串中时才能这样做:{"json":{"json_stuff":value}, "html": "<html><body></body></html"}
您可以使用JsonBuilder呈现您的json视图,并在viewfile.json.jbuilder中以文本方式部分呈现您的html文件。