【问题标题】:Rails ActionController unknown formatRails ActionController 未知格式
【发布时间】:2015-10-29 12:49:31
【问题描述】:

我正在尝试渲染 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

views/api/reports/create.xlsx.axlsx

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

【问题讨论】:

  • 试试这个format.xlsx { render xlsx: "create", filename: "api/reports/create.xlsx" }
  • 没有得到Completed 406 Not Acceptable in 10038ms ActionController::UnknownFormat (ActionController::UnknownFormat): app/controllers/api/reports_controller.rb:12:in 'create'
  • 尝试重启你的服务器。
  • 这是我做的第一件事,哈哈
  • 您是否尝试过通过标题设置名称? github.com/straydogstudio/axlsx_rails#file-name

标签: ruby-on-rails ruby actioncontroller axlsx


【解决方案1】:

对我来说,在 Rails 4.2 中,我必须指定完整的模板文件名,包括扩展名。根据axlsx_rails docs,Rails 4.2 中的语法有所不同。这对我有用:

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

【讨论】:

  • 对于 Rails 4.2,我只需要输入文件扩展名就可以了...render xlsx: 'report_evals_by_supvr.xlsx.axlsx' 或 render 'report_evals_by_supvr.xlsx.axlsx' 为我工作。
【解决方案2】:

您遇到的错误并不意味着 rails 没有找到 xlsx 格式:这意味着它比较了您提供的格式列表(即只是 xlsx)并将其与它的格式集进行了比较认为浏览器愿意接受,没有发现任何重叠。

如果您只想要呈现一种格式,那么您根本不需要使用respond_to - 只需将整个内容替换为

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

Rails 从 url 上的扩展名和 Accept 标头中派生出它认为可接受的格式。格式协商通常通过扩展而不是 Accept 标头简单地完成 - 链接(或发布)到 /some/path.xlsx 应将格式设置为 xlsx。您可以通过在传递给路径帮助程序的选项中包含 format: 'xlsx' 或作为路由选项哈希的一部分来实现此目的。

【讨论】:

  • axlsx_rails 用于将 xlsx 添加到可用格式数组中(如果缺少)。这将允许您提供xlsx,即使网址没有正确的扩展名。这在 Rails 4 中变得非常麻烦,并且被删除了。所以respond_to 的问题可能来自于在请求的url 中没有xlsx 扩展。
【解决方案3】:

好吧,我真的来晚了,OP 可能已经继续,但对于遇到此问题的其他人来说,可能的解释可能是忘记在链接本身中设置格式。例如,您需要在视图中执行以下操作:download_file_path(format: "xlsx")

【讨论】:

  • 这对我来说是个问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 2018-11-02
  • 2014-11-01
  • 2018-09-29
  • 1970-01-01
相关资源
最近更新 更多