我有这样的链接
<%= link_to "download file", import_horse_report_horses_path(format: 'xlsx') %>
然后在控制器操作中我有以下代码
def import_horse_report
@horses = ImportHorse.all
respond_to do |format|
format.xlsx{ }
end
end
对于此操作,我有此模板import_horse_report.xlsx.axlsx
wb = xlsx_package.workbook
wb.add_worksheet(name: "Horses") do |sheet|
@horses.each do |horse|
sheet.add_row [horse.breed, horse.date_of_birth, horse.gender]
end
end
我正在使用axlsx_rails gem并遵循其文档。但是我得到了这个错误
Missing template horses/import_horse_report, application/import_horse_report with {:locale=>[:en], :formats=>[:xlsx], :handlers=>[:erb, :builder, :coffee, :rabl]}
我该如何解决这个问题?
答案 0 :(得分:1)
您可以通过更改
来具体尝试渲染xlsformat.xlsx{ }
到
format.xlsx{ filename =>'import_horse_report.xlsx' }
答案 1 :(得分:0)
尝试使用显式的render语句:
format.xlsx { render xlsx: 'import_horse_report' }
如果在没有尾随/horses/import_horse_report
的情况下调用.xlsx
,则除非在路由文件中强制使用:xlsx
格式,否则不会执行render语句。如果您想保留respond_to
阻止,请更改您的网址。否则,您可以删除respond_to
块以获取简单的render :xlsx
语句(前提是您将永远不会提供任何其他内容。)
答案 2 :(得分:0)
我使用
解决了这个问题render xlsx: "import_horse_report"
而不是respond_to。根据您的情况,这可能是一种选择。