【问题标题】:How to redirect to html page after render_to_string?如何在 render_to_string 之后重定向到 html 页面?
【发布时间】:2018-07-09 15:03:53
【问题描述】:

在我的控制器操作PagesController#transfer 我想下载一个 xml 文档,然后重新加载页面。

但是xml文档是用render_to_string生成的,所以当我下载文件后尝试添加重定向时出现错误。

这样做的目的是在下载 XML 后得到一个 flash 消息。所以重新加载页面似乎是一个不错的选择。

pages_controller

def transfer
   ...
   multiple_export_to_sepa(objects, @errors)
end


private

def multiple_export_to_sepa(objects, errors)
    sepa_filename = "virements_#{params[:type]}.xml"
    if objects.present?
      stream = render_to_string(template: "admin/pages/transfers_#{params[:type]}.xml", layout: false)
      send_data(stream, type: 'text/xml', filename: sepa_filename , status: :created)
      flash[:success] = "#{objects.length} objects has been generated."
      redirect_to action: :transfer
    else
      redirect_to action: :transfer
    end
end

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    您是否尝试过使用flash.now

    def multiple_export_to_sepa(objects, errors)
        sepa_filename = "virements_#{params[:type]}.xml"
        if objects.present?
          stream = render_to_string(template: "admin/pages/transfers_#{params[:type]}.xml", layout: false)
          send_data(stream, type: 'text/xml', filename: sepa_filename , status: :created)
          flash.now[:success] = "#{objects.length} objects has been generated."
        else
          redirect_to action: :transfer
        end
    end
    

    来自文档(http://guides.rubyonrails.org/action_controller_overview.html#flash-now):

    5.2.1 flash.now 默认情况下,将值添加到闪存将使它们可用于下一个请求,但有时您可能希望在同一个请求中访问这些值。例如,如果创建操作未能保存资源并且您直接呈现新模板,则不会产生新请求,但您可能仍希望使用 flash 显示消息。为此,您可以像使用普通 flash 一样使用 flash.now:

    class ClientsController < ApplicationController
      def create
        @client = Client.new(params[:client])
        if @client.save
          # ...
        else
          flash.now[:error] = "Could not save client"
          render action: "new"
        end
      end
    end
    

    【讨论】:

    • 不幸的是,我已经尝试过flash.now,但它在我的情况下不起作用。
    • 你知道为什么吗?当您删除 redirect_to 并改用 flash.now 时会发生什么?是因为您使用的是旧版本还是因为您没有正确使用 flash.now?
    • 什么也没有发生。我正在使用 Rails 5 和 Ruby 2.3.0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    相关资源
    最近更新 更多