Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails ActionController unknown format

I am trying to render a xlsx file. But I keep getting a 406/UnknowFormat. I have done the right setup, maybe im missing something?

Rails 4.2 app

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

config/initializers/mime

Mime::Type.register "application/xlsx", :xlsx

controller

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

views/api/reports/create.xlsx.axlsx

wb = xlsx_package.workbook
wb.add_worksheet(name: "Reports") do |sheet|
  sheet.add_row [@report_name]
end
like image 388
Seal Avatar asked Oct 29 '15 12:10

Seal


2 Answers

For me, in Rails 4.2 I had to specify the full template filename including extension. According to the axlsx_rails docs the syntax is different in Rails 4.2. Here's what worked for me:

some_controller.rb

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

template_path/report.xlsx.axlsx

wb = xlsx_package.workbook
wb.add_worksheet(:name => "Basic Worksheet") do |sheet|
  sheet.add_row ["First Column", "Second", "Third"]
end
like image 93
Patrick_870206 Avatar answered Oct 11 '22 12:10

Patrick_870206


The error you are getting doesn't mean that rails didn't find the the xlsx format: it means that it compared the list of formats you're providing (i.e. just xlsx) and compared it to the set of formats it thinks the browser is willing to accept and didn't find any overlap.

If as it appears there is only one format you want to render then you don't need to use respond_to at all - just replace the whole thing with

render xlsx: "create", template: "api/reports/create"

Rails derives what it thinks are acceptable formats from the extension on the url and the Accept header. Format negotiation is generally simply done via the extension than the Accept header - linking (or posting) to /some/path.xlsx should set the format to xlsx. You can do this by including format: 'xlsx' in the options you pass to path helpers or as part of a hash of routing options.

like image 28
Frederick Cheung Avatar answered Oct 11 '22 12:10

Frederick Cheung