Камень Axlsx-Rails не работает должным образом, показывает отсутствующий шаблон

У меня есть такая ссылка

<%= 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 и следую его документации. Но я получаю эту ошибку

Missing template horses/import_horse_report, application/import_horse_report with {:locale=>[:en], :formats=>[:xlsx], :handlers=>[:erb, :builder, :coffee, :rabl]}

Как я могу решить это?

3 ответа

Вы можете попробовать конкретно, что XLS будет отображаться путем изменения

format.xlsx{ }

в

format.xlsx{ filename =>'import_horse_report.xlsx' }

ссылка: https://github.com/straydogstudio/axlsx_rails

Я исправил это с помощью

render xlsx: "import_horse_report" 

а не response_to. Это может быть вариант в зависимости от вашей ситуации.

Попробуйте явное выражение рендеринга:

format.xlsx { render xlsx: 'import_horse_report' }

Если вы звоните /horses/import_horse_report без запаздывания .xlsx оператор рендеринга не будет выполнен, пока вы не принудительно :xlsx формат в файле маршрутов. Если вы хотите сохранить свой respond_to блок, измени свой URL. В противном случае вы можете бросить respond_to блок для простого render :xlsx заявление (при условии, что вы никогда больше не будете служить.)

Другие вопросы по тегам