2

レポートコントローラーでこのコードを使用して動的に csv ファイルを作成します。

  def exportCsv
    @report = Report.find(:all)

     csv = CSV.generate do |csv|
       csv << ["id","cod_user_id","city","address","urgent level","description"]
       @report.each do |r|
        csv << [r.id,r.cod_user_id,r.city,r.address,r.urgent_level,r.description]
       end
      end

    send_data csv, :type => 'text/csv', :disposition => "attachment; filename=list.csv"
  end

show.html.erb ファイルのリンクのコードは次のとおりです。

<a href="<%=url_for :controller=>"reports",:action =>"exportCsv"%>">Clicca qui</a>

リンクをクリックしても、ダウンロードが開始されず、白いページが表示されます。白いページを更新した場合にのみダウンロードが開始されます。ダウンロード リンクをクリックすると、現在開いているページが開いたままになり、ダウンロードが開始されます。

更新 i jquery mobile を使用しない場合は jquery.mobile-1.3.1 を使用します。ダウンロードが開始され、現在のページが開いたままになりますが、jquery-mobile を使用するとリンクが正しいモードで機能しません。

4

2 に答える 2

1

以下を使用してみてください。

send_data csv, :type => 'text/csv', :disposition => "attachment", :filename => "list.csv"

send_dataドキュメントから( http://apidock.com/rails/ActionController/Streaming/send_data ):

:disposition - specifies whether the file will be shown inline or downloaded. 
   Valid values are ‘inline’ and ‘attachment’ (default).
于 2013-07-10T13:58:01.943 に答える
1

リンクの属性に data-ajax="false" を追加します。デフォルトでは、リンクは jQuery Mobile の Ajax で読み込まれます。

<a data-ajax="false" href="<%=url_for :controller=>"reports",:action =>"exportCsv"%>">Clicca qui</a>

docs によると、 Ajax の読み込みも防止する rel="external" を使用することもできます。2 つの違いはセマンティックです。ドメイン外の URL にリンクする場合は rel="external" を使用し、内部リンクには data-ajax="false" を使用する必要があります。

于 2013-07-10T15:36:14.557 に答える