Ruby on rails Rails 5.0.1 Excel呈现不工作

Ruby on rails Rails 5.0.1 Excel呈现不工作,ruby-on-rails,ruby,excel,csv,Ruby On Rails,Ruby,Excel,Csv,我有一个应用程序,可以帮助学校跟踪学生参加体育锻炼和比赛的情况,我有所有的索引操作来呈现html、csv和xls格式,一切都很顺利。我有一个特别的报告,它使用了几个模型关系来完成,我不需要呈现csv(我认为这太复杂了,无法实现to_csv方法,我甚至不知道该把它放在哪里,但这不是我的问题),现在,我创建了equipos#u controller#forma#u rep方法和一个相关视图,该视图带有一个表单来获取报告参数,正如您在routes和controller代码中所看到的,当报告操作呈现默认

我有一个应用程序,可以帮助学校跟踪学生参加体育锻炼和比赛的情况,我有所有的索引操作来呈现html、csv和xls格式,一切都很顺利。我有一个特别的报告,它使用了几个模型关系来完成,我不需要呈现csv(我认为这太复杂了,无法实现to_csv方法,我甚至不知道该把它放在哪里,但这不是我的问题),现在,我创建了equipos#u controller#forma#u rep方法和一个相关视图,该视图带有一个表单来获取报告参数,正如您在routes和controller代码中所看到的,当报告操作呈现默认HTML时,它可以正常工作,正如您在下面的日志中所看到的,来自“forma#rep.HTML.erb”表单的参数位于params数组中

Started POST "/equipos/reporte_asist" for 127.0.0.1 at 2017-01-05 18:37:51 -0600
Processing by EquiposController#reporte_asist as HTML
Parameters: {"utf8"=>"✓",   "authenticity_token"=>"IP1O2bSgkGcSaUn5Sf9Tnp30yzxfP10+cA0h/1+XudoR7W8SoP6xveP3fwJpLFTvyRaBFdtqsqz5pCfYID5b5Q==", "entrenador"=>"1",   "inicio"=>"2016-12-12", "final"=>"2016-12-20", "commit"=>"Crear Reporte"}

... most SQL ommited

Rendering equipos/reporte_asist.html.erb within layouts/application

Rendered equipos/reporte_asist.html.erb within layouts/application (69.4ms)
Rendered layouts/_shim.html.erb (0.5ms)
CACHE (0.0ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
Rendered layouts/_header.html.erb (5.9ms)
Rendered layouts/_footer.html.erb (1.1ms)
Completed 200 OK in 210ms (Views: 165.2ms | ActiveRecord: 5.6ms)
但当我点击“Excel”链接时:

应用程序/控制器/设备控制器.rb

def index
  @equipos = Equipo.paginate(page: params[:page])

  respond_to do |format|
    format.html
    format.csv { send_data @equipos.to_csv }
    format.xls
  end
end

# GET /equipos/forma_rep
def forma_rep
  @equipo = Equipo.new
  @entrenadores = User.all
end

# PUT /equipos/reporte_asist
def reporte_asist

  if params[:entrenador]
    @entrenador = User.find(params[:entrenador].to_i)
    inicio = Time.parse(params[:inicio])
    final = Time.parse(params[:final])
    @equipos = @entrenador.equipos
    @eventos = reporte(@entrenador.id, inicio, final)
  else
    @entrenador = current_user
    @equipos = @entrenador.equipos
    @equipos.each do |equi|
      @eventos << equi.eventos
    end
  end

  respond_to do |format|
    format.html
    format.xls
  end
end
def索引
@设备=设备分页(第页:参数[:第页])
回应待办事项|格式|
format.html
format.csv{send_data@equalos.to_csv}
format.xls
结束
结束
#获取/装备/形式代表
def forma_代表
@equipo=equipo.new
@entrenadores=User.all
结束
#放置/装备/报告组件
def报告asist
如果参数[:entrenador]
@entrenador=User.find(参数[:entrenador].to_i)
inicio=Time.parse(参数[:inicio])
final=Time.parse(参数[:final])
@equipos=@entrenador.equipos
@eventos=reporte(@entrenador.id,inicio,final)
其他的
@entrenador=当前用户
@equipos=@entrenador.equipos
@每台设备都是一样的|

@eventos添加要发布到
reporte\u asist\u路径的参数,如下所示:

reporte_asist_path(format: 'xls', entrenador_id: @entrenador.id)
更多信息可在此处找到:


还请注意,虽然Rails支持对链接使用POST方法,但它依赖于JavaScript。如果用户禁用了JavaScript,则请求将退回到GET方法。所以使用表单更安全。

请原谅我的无知,我只是个初学者,你说使用表单是什么意思?我很困惑,因为我在使用表单(我想),难道我没有正确地使用它们吗?我尝试了“搜索表单”的方法,将表单嵌入index.html.erb,但没有帮助,或者我无法使其工作。我在你的开场白中没有看到任何表单。我所说的表单是指HTML的表单元素。您当前正在使用link_to方法,该方法只生成HTML的常规链接元素。要在Rails中生成HTML表单元素,您可以使用form_标记方法或类似方法。现在我发现Rails路由正在尝试路由到“show”操作,参数[:id]等于“reporte_asist”,当然失败了。。。我试图修改config/routes.rb文件,但没有成功
def index
  @equipos = Equipo.paginate(page: params[:page])

  respond_to do |format|
    format.html
    format.csv { send_data @equipos.to_csv }
    format.xls
  end
end

# GET /equipos/forma_rep
def forma_rep
  @equipo = Equipo.new
  @entrenadores = User.all
end

# PUT /equipos/reporte_asist
def reporte_asist

  if params[:entrenador]
    @entrenador = User.find(params[:entrenador].to_i)
    inicio = Time.parse(params[:inicio])
    final = Time.parse(params[:final])
    @equipos = @entrenador.equipos
    @eventos = reporte(@entrenador.id, inicio, final)
  else
    @entrenador = current_user
    @equipos = @entrenador.equipos
    @equipos.each do |equi|
      @eventos << equi.eventos
    end
  end

  respond_to do |format|
    format.html
    format.xls
  end
end
<?xml version="1.0"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
  xmlns:o="urn:schemas-microsoft-com:office:office"
  xmlns:x="urn:schemas-microsoft-com:office:excel"
  xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
  xmlns:html="http://www.w3.org/TR/REC-html40">
  <Worksheet ss:Name="Asistencias">
    <Table>
      <Row>
        <Cell><Data ss:Type="String">Entrenador:</Data></Cell>
        <Cell><Data ss:Type="String"><%= @entrenador.name %></Data> </Cell>
      </Row>
      ....etc.
<p>
  Descargar:
  <%= link_to "Excel", reporte_asist_path(format: "xls"), method: :post %>
</p>
<h1>Reporte de Asistencias</h1>
  <%= form_tag(reporte_asist_path) do %>
  <%= label_tag(:entrenador, "Entrenador:") %>
  <%= select_tag :entrenador, options_from_collection_for_select(@entrenadores, "id", "name"), prompt: "Seleccione el entrenador", class: 'form-control' %>
  <%= label_tag(:inicio, "Fecha inicial de reporte:") %>
  <%= date_field_tag :inicio, class: 'form-control' %>
  <%= label_tag(:final, "Fecha final de reporte:") %>
  <%= date_field_tag :final, class: 'form-control' %>
  <%= submit_tag "Crear Reporte", class: "btn btn-default" %>
<% end %>
</div>
reporte_asist_path(format: 'xls', entrenador_id: @entrenador.id)