如何在rails动作中使用多个渲染引擎?

时间:2016-05-10 14:09:39

标签: ruby-on-rails ruby-on-rails-4

我想在一个请求中返回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 个答案:

答案 0 :(得分:2)

render_to_stringHTML这两种情况下都需要使用JSONRender只能在您的操作中使用一次,否则您将获得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)

  1. 您无法多次渲染

  2. 如果您决定渲染json格式,则无法在其中插入任何html。

  3. 只有当你的所有html都在这样的字符串中时才能这样做:{"json":{"json_stuff":value}, "html": "<html><body></body></html"}

    您可以使用JsonBuilder呈现您的json视图,并在viewfile.json.jbuilder中以文本方式部分呈现您的html文件。

    1. 建议:如果您现在就在这里,可能是因为您的构思存在问题,您可能希望将此呼叫分成两个部分。