我想在一个请求中返回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返回 . 但是如何?!
2 回答
您需要在
HTML
和JSON
两种情况下使用render_to_string
,Render
只能在您的操作中使用一次,否则您将获得double render error
:检查Here
您无法多次渲染
如果您决定渲染json格式,则无法在其中插入任何html .
只有当你的所有html都在这样的字符串中时才能这样做:
{"json":{"json_stuff":value}, "html": "<html><body></body></html"}
您可以使用JsonBuilder渲染您的json视图,并在viewfile.json.jbuilder中对文本中的html文件进行部分渲染 .