Ruby on Rails: 导出 xlsx 导出所有 html 页面而不是请求的数据

Ruby on Rails: export xlsx export all html page instead the requested data

我正在使用 rails 4.2,并使用 gems axlsx 和 axlsx_rails 我很快就会转到 rails 5,但现在我使用这个版本。

我想要的: 使用 axls_rails gem

从查询中导出 xlsx 文件

我得到的是: 它将整个 html 文件导出为数据,见图:

我完全按照 git 文档中的 3 个不同的指南进行了操作,并且已经调试了几次,但没有发现问题。希望这里有人可以帮助我了解导致它的原因。

Gemfile:

gem 'rails', '4.2.11'

# import/export xlsx gems
gem 'write_xlsx'
gem 'rubyzip', '>= 1.2.1'
gem 'axlsx', git: 'https://github.com/randym/axlsx.git', ref: 'c8ac844'
gem 'axlsx_rails'

html 文件:

= link_to "<i class='icon icon-file-down'></i> Export</a></li>".html_safe, server_report_system_reports_path(format: :xlsx)

控制器文件:

def server_report
    organization_id = params[:organization_id]
    @accounts = Admin::Account.where("organization_id = ?", organization_id) unless organization_id.blank?
    @accounts_paginated = @accounts.paginate(per_page: 10, page: params[:page] || 1 )
   
    respond_to do |format|
      format.html
      format.xlsx {
        response.headers['Content-Disposition'] = 'attachment; filename="server_report.xlsx"'
      }
    end
  end

xlsx.axlsx 文件:

wb = xlsx_package.workbook
wb.add_worksheet(name: "Accounts") do |sheet|

  sheet.add_row ["Account id", "Member id", "Member name", "Member email"]
  @accounts_paginated.each do |account|
    account.members.each do |member|
      sheet.add_row [account.id, member.id, member.name, member.email]
    end
  end
end

编辑: 我尝试调用另一个名为 export 的 def 并尝试查看 respond_to 是否有问题并使用另一个查询,但它也做了同样的事情

我也试过在format.xlsx这一行写,但仍然没有任何改变:

编辑 2: 我试图在 respond_to 中渲染文件而不是 format.xlsx 中的 axlsx.xlsx 文件,但我得到了相同的结果

response.headers['Content-Disposition'] = 'attachment; filename="server_report.xlsx"'

我发现了问题。我在控制器中渲染 xlsx 文件时添加了 layout: false 并且它起作用了