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 并且它起作用了
我正在使用 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 并且它起作用了