新手问题 AbstractController::DoubleRenderError 是什么情况。。

zix · 2016年08月21日 · 最后由 Rei 回复于 2016年08月22日 · 2132 次阅读

controller:

def export
        @games = @@data
        book = Spreadsheet::Workbook.new
        sheet1 = book.create_worksheet name: '场次'
        sheet1.row(0).concat %w(序号 主题 日期 时间)
        row_num = 1
        @games.each do |game|
            sheet1.row(row_num).concat [row_num,
                                        Theme.find(game.theme_id).name,
                                        game.created_at.getlocal.to_s(:month_and_year),
                                        game.created_at.getlocal.to_s(:time)]
            row_num += 1
        end

        xls_report = StringIO.new
        book.write xls_report

        send_data(xls_report.string,
                  filename: 'your_excel_file_name.xls',
                  type: 'application/vnd.ms-excel',
                  disposition: 'inline')
        redirect_to (request.env['HTTP_REFERER'])

    end

view:

<%= link_to '导出', "/export", class: "btn btn-info btn-lg glyphicon glyphicon-export", "aria-hidden": "true",
            data: { confirm: '确定导出吗?' }%>

我的页面里有一个导出按钮,指向 export 控制器。 但是我想重新回到刚才的页面而不是

/export

这要如何操作呢

不能既 send_data 又 redirect_to,这两个都属于 render 操作。

send_data 应该不会导致浏览器页面切换的,如果有,在下载链接那里加上 target="_blank"

#1 楼 @Rei 原来是这样 可是如果 target="_blank" 我要如何执行导出动作呢

#2 楼 @zix 在服务端看起来都是一个 http 请求。

#1 楼 @Rei 链接加了 target="_blank" 后新建了一个空白页面,原页面没有切换。 我的路由设置的是

get '/export', to:'themes#export'

你说不会导致页面切换该如何理解呢? 路由指向了这个路径,不是应该切换吗?

#4 楼 @zix 链接完整代码是什么?

#5 楼 @Rei 首楼贴了啊

<%= link_to '导出', "/export", class: "btn btn-info btn-lg glyphicon glyphicon-export", "aria-hidden": "true",
            data: { confirm: '确定导出吗?' }%>

#6 楼 @zix 加 target="_blank",应该在新标签页开始下载啊。

不管 target blank 了,你去掉 disposition: 'inline' 和 redirect_to 应该就是你要的效果。

zix 关闭了讨论。 10月05日 00:49
需要 登录 后方可回复, 如果你还没有账号请 注册新账号