首页 文章

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

提问于
浏览
0

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

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

  • 2
    • 您无法多次渲染

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

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

    您可以使用JsonBuilder渲染您的json视图,并在viewfile.json.jbuilder中对文本中的html文件进行部分渲染 .

    • 建议:如果你可能因为你的概念有问题,你可能想要用两个动作分开这个调用 .

相关问题