首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails axlsx-rails: ActionController::UnknownFormat

Rails axlsx-rails: ActionController::UnknownFormat
EN

Stack Overflow用户
提问于 2018-04-19 16:21:21
回答 3查看 859关注 0票数 0

我在使用axlsx-rails gem生成excel报告时遇到了问题,因为我一直都在使用Completed 406 Not Acceptable ActionController::UnknownFormat - ActionController::UnknownFormat

我在索引视图中有一个带有两个按钮的表单,其中一个按钮提交搜索请求,将搜索结果显示为html表,另一个应该允许用户生成包含搜索结果的excel报告。

我正在使用rails 5.1.6

代码语言:javascript
复制
gem 'rubyzip', '>= 1.2.1'
gem 'axlsx', git: 'https://github.com/randym/axlsx.git', ref: 'c8ac844'
gem 'axlsx_rails'

在控制器中:

orders_controller.rb

代码语言:javascript
复制
def index
  orders = request.query_string.present? ? Order.search(params, 
  current_user) : Order.pendientes

 if params[:button] == 'report'
   @orders = orders
   respond_to do |format| 
     format.xlsx
     response.headers['Content-Disposition'] = 'attachment; 
     filename="Informe_Pedidos.xlsx"'
   end
 else
  @orders = orders.order("#{sort_column} #{sort_direction}").page(params[:page]).per(params[:paginas])
 end
end

我还在mime_types初始化器中添加了以下内容:

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

我终于有了这个模板:orders/views/index.xlsx.axlsx

编辑:

视图中的提交按钮逻辑:

代码语言:javascript
复制
<%=button_tag type: 'submit', value: 'report', class: 'btn btn-outline-  danger' do %>
  <i class="fa fa-download" aria-hidden="true"></i>
<%end%>

这是完整的请求和错误消息:

代码语言:javascript
复制
Started GET "/orders?utf8=%E2%9C%93&f_fin=2018-04-19&f_inicio=&      pendientes=true&favoritos=true&planta=&paginas=&bu                    tton=report&pedido=&sap_cod=&descripcion=&ref=&ot=&desc_ot=&ubicacion=" for  10.0.2.2 at 2018-04-19 17:37:04 +0000
Processing by OrdersController#index as HTML
Parameters: {"utf8"=>"✓", "f_fin"=>"2018-04-19", "f_inicio"=>"",  "pendientes"=>"true", "favoritos"=>"true", "pl                   anta"=>"",    "paginas"=>"", "button"=>"report", "pedido"=>"", "sap_cod"=>"",   "descripcion"=>"", "ref"=>"", "ot"=>""                   , "desc_ot"=>"",   "ubicacion"=>""}
 User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" =  $1 ORDER BY "users"."id" ASC LIMIT $2  [                   ["id", 1],    ["LIMIT", 1]]
 Completed 406 Not Acceptable in 3ms (ActiveRecord: 0.1ms)
EN

回答 3

Stack Overflow用户

发布于 2018-04-19 22:09:04

尝试下一个解决方案:

代码语言:javascript
复制
...
format.xlsx do
  render xlsx: "index", filename="Informe_Pedidos"
end
...
票数 0
EN

Stack Overflow用户

发布于 2018-04-21 06:31:16

这就是我现在在一个生产应用程序中得到的。我可能已经写过了,但那是一段时间以前的事了,所以除了“it works”之外,我不能对它说太多。我相信type参数正在从初始化器中获取mime类型,这与您所拥有的一样。希望它能帮上忙!

代码语言:javascript
复制
def show
  generated_report = GeneratedReport.find(params[:id])
  send_data(
    generated_report.file_data,
    filename: generated_report.filename,
    type: :xlsx
  )
end
票数 0
EN

Stack Overflow用户

发布于 2019-03-31 02:56:20

我不知道你是否已经解决了这个问题。但如果没有,请尝试在表单中添加"Format: xlsx“。

例如:

代码语言:javascript
复制
<%= form_for User.new, index_path(format: :xlsx) do |f| %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49916127

复制
相关文章

相似问题

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