首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails ActionController未知格式

Rails ActionController未知格式
EN

Stack Overflow用户
提问于 2015-10-29 20:49:32
回答 3查看 13.7K关注 0票数 8

我正在尝试呈现一个xlsx文件。但我一直在买406/UnknowFormat。我已经做了正确的设置,也许我遗漏了什么?

Rails 4.2应用程序

代码语言:javascript
运行
复制
gem 'axlsx'
gem "axlsx_rails"
gem 'zip-zip'

配置/初始化器/mime

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

控制器

代码语言:javascript
运行
复制
respond_to do |format|
      format.xlsx { render xlsx: "create", template: "api/reports/create" }
end

views/api/report/create.xlsx.axlsx

代码语言:javascript
运行
复制
wb = xlsx_package.workbook
wb.add_worksheet(name: "Reports") do |sheet|
  sheet.add_row [@report_name]
end
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-29 22:35:10

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

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

代码语言:javascript
运行
复制
render xlsx: "create", template: "api/reports/create"

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

票数 8
EN

Stack Overflow用户

发布于 2015-11-13 23:49:29

对我来说,在Rails 4.2中,我必须指定完整的模板文件名,包括扩展名。根据axlsx_rails docs,在Rails4.2中的语法是不同的。以下是对我有效的方法:

some_controller.rb

代码语言:javascript
运行
复制
def create_report
  render "template_path/report.xlsx.axlsx"
end

template_path/report.xlsx.axlsx

代码语言:javascript
运行
复制
wb = xlsx_package.workbook
wb.add_worksheet(:name => "Basic Worksheet") do |sheet|
  sheet.add_row ["First Column", "Second", "Third"]
end
票数 11
EN

Stack Overflow用户

发布于 2016-07-10 09:34:56

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33414746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档