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

标签 ruby-on-rails ruby-on-rails-3

在我的 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/

    相关文章:

    jquery - 在jquery中滑动div

    ruby-on-rails - 有什么方法可以防止用户意外发帖两次?

    ruby-on-rails - 使用Postgres适配器的Rails应用程序无法激活pg

    ruby-on-rails - 为什么 Rails 验证未更改的属性?

    ruby-on-rails - Delayed_job 与 Appoxy SimpleWorker

    ruby-on-rails-3 - 无法在 ubuntu 10.04 服务器上的 rails 3 的新数据库中使用 postgres 用户

    ruby-on-rails - 只有在逗号后没有空格的情况下才在逗号后添加空格?

    ruby-on-rails - 安装 therubyracer 时出错

    ruby-on-rails - Cucumber/Capybara/Selenium - 设置 cookie

    ruby-on-rails - 如何计算 ActiveRecord .group 查询的结果?链接 .count 返回一个哈希值