0

axlsxを使用しています(テンプレート用にaxlsx_railsを使用)。

コントローラーにこれがあります:

  def listado_publicaciones
    if params[:publicaciones]
      @Publicaciones = params[:publicaciones]
    else
      @Publicaciones = Proyecto.where("concurso_id","=",@concurso.id).as_json({:include => [:creador => {:only =>[:id],:include =>[:ficha =>{:only =>[:nombres,:apellidos], :methods => [:fullname],:include => [:publicacions => {:only =>[:id,:omitir,:anio,:titulo,:revista_nombre,:primer_autor,:autor_correspondiente,:coautor,:estado_id],:include => [:subtipo]}]}]}]})
    end
    respond_to do |format|
      format.html
      format.json { render :json => @Publicaciones}
      format.xlsx
    end
  end

(長い @Publicaciones を避けるために、後で JBuilder を使用します...)

さて、「listado_publicaciones」は最初にhtmlビューを表示します。ここでは、angularを使用して出版物のjsonリストを取得し、ユーザーがExcelを生成する前にいくつかのアイテムを破棄できる場所があります。次に、ユーザーは「To Excel」を呼び出すボタンをクリックしますangularjs サービス:

@project.service 'concursos_xlsx', [
  '$resource'
  ($resource) ->
    $resource '/concursos/:id/:action.xlsx', { id: '@id' },
      listado_publicaciones:
        method: 'POST'
        params: action: 'listado_publicaciones'
] 

私は POST を使用します。最初に Json で取得したパブリケーションを $scope に送り返すためです。これはパブリケーションとその他のデータの非常に大きなリストであるため、長い URL のために GET を使用しようとすると機能しません...

次に、同じコントローラー「listado_publicaciones」がパラメーター publicaciones (params[:publicaciones]) を取得し、xlsx 形式に応答します...

次に、「listado_publicaciones.xlsx.axlsx」という私のテンプレートが Excel ファイルを生成します....しかし、ダウンロード方法がわかりません... chrome 開発者ツールを確認すると、次のように表示されます。

XHR finished loading: POST "http://localhost:3000/concursos/1/listado_publicaciones.xlsx".

そして、そこをダブルクリックすると、実際に xlsx ファイルをダウンロードできます...しかし、「Excel へ」ボタンをクリックしたときにファイルをダウンロードする方法がわかりません...「send_data」を使用してみました。 「send_file」ですが、間違った方法で使用している可能性があります...助けてください、ありがとう!

4

0 に答える 0