Techioz Blog

Rails ActionControllerの不明な形式

概要

xlsxファイルをレンダリングしようとしています。しかし、406/UnknowFormat が発生し続けます。正しいセットアップを行ったのですが、何かが足りないのでしょうか?

Rails 4.2 アプリ

gem 'axlsx'
gem "axlsx_rails"
gem 'zip-zip'

設定/イニシャライザ/MIME

Mime::Type.register “application/xlsx”、:xlsx

コントローラ

respond_to do |format|
      format.xlsx { render xlsx: "create", template: "api/reports/create" }
end

ビュー/api/レポート/create.xlsx.axlsx

wb = xlsx_package.workbook
wb.add_worksheet(name: "Reports") do |sheet|
  sheet.add_row [@report_name]
end

解決策

私の場合、Rails 4.2 では拡張子を含む完全なテンプレート ファイル名を指定する必要がありました。 axlsx_rails のドキュメントによると、Rails 4.2 では構文が異なります。私にとってうまくいったのは次のとおりです。

some_controller.rb

def create_report
  render "template_path/report.xlsx.axlsx"
end

テンプレートパス/レポート.xlsx.axlsx

wb = xlsx_package.workbook
wb.add_worksheet(:name => "Basic Worksheet") do |sheet|
  sheet.add_row ["First Column", "Second", "Third"]
end