gpt4 book ai didi

ruby-on-rails - 使用render_to_string后如何正常渲染 View ?

转载 作者:行者123 更新时间:2023-12-04 18:52:03 26 4
gpt4 key购买 nike

在我的 Rails 应用程序中,我有一个使用 XML Builder 模板( rxml )模板和 render_to_string 创建 XML 文档的操作。 . XML 文档被转发到后端服务器。

创建 XML 文档后,我想向浏览器发送一个普通的 HTML 响应,但不知何故,Rails 记住了对 render_to_string 的第一次调用。 .

例如:

  • Rails 找不到默认 View show.html.erb因为它寻找一个 show.rxml .
  • 简单地放一个 render 'mycontroller/show.html.erb'在我的操作处理程序底部,Rails 找到模板,但浏览器无法工作,因为响应 header 的内容类型是 text/xml .

  • 有什么办法可以使用 render_to_string没有“污染”实际的浏览器响应?

    编辑:似乎在 Rails 2 erase_render_results 中可以解决问题,但在 Rails 3 中它不再可用。

    最佳答案

    似乎这可能是 rails 3 中的一个错误(至少与 2.3.x render_to_string 的行为相比)。在 source for 2.3.8他们显然采取了额外的步骤来重置 content_type 并将响应正文设置为 nil (除其他外)。

    def render_to_string
    ...
    ensure
    response.content_type = nil
    erase_render_results
    reset_variables_added_to_assigns
    end

    但在 AbstractController::Rendering 的 3.0.3 源中
    def render_to_string(*args, &block)
    options = _normalize_args(*args, &block)
    _normalize_options(options)
    render_to_body(options)
    end

    您可以看到没有显式重置变量,render_to_body 只返回 view_context.render。 content-type、response_body 等可能在其他地方处理,这是一个红鲱鱼,但我的第一直觉是设置
    response.headers['Content-Type'] = 'text/html'
    在您的 render_to_string 之后在实际渲染之前。

    关于ruby-on-rails - 使用render_to_string后如何正常渲染 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4684486/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com