11

良い一日!自動生成されたファイル qwerty.csv をダウンロードしたいのですが、テキスト "12345" (ファイルなし) しか返されません。手伝って頂けますか?

UI

<script type="text/javascript">
function getCsv() {
    var ids = getSelectedRecordIds();
    $.post('/payments/form_csv.csv', { ids: ids }, function(data) {});
}
</script>

コントローラ

def form_csv
    csv_string = CSV.generate do |csv|
        csv << ["12345"]
    end

    respond_to do |format|
        format.csv {
            send_data csv_string, :type => 'text/csv; charset=utf-8; header=present', :disposition => "attachment; filename=qwerty.csv", :filename => "qwerty.csv"
        }
    end
end

コンソールで

Started POST "/payments/form_csv.csv" for 127.0.0.1 at 2012-06-18 18:18:11 +0400 
Processing by PaymentsController#form_csv as CSV
  Parameters: {"ids"=>["18\n\t  "]}
  Rendered text template (0.0ms)
Sent data qwerty.csv (0.4ms)
Completed 200 OK in 2ms (Views: 0.4ms | ActiveRecord: 0.0ms)

しかし、ファイルプロンプトはありません...

4

1 に答える 1

8

おお、フォーム送信のように、ajax なしで動作します。

このトピックにも同じ問題があります: http://www.ruby-forum.com/topic/111107

フォームを非 AJAX フォームにする 試してみると… うまくいきました。

コントローラ

def form_csv
    csv = get_csv
    send_csv(csv)
end

def get_csv
    result = CSV.generate do |csv|
        csv << ["12345"]
    end
    return result
end

def send_csv(csv)
    send_data csv, :type => 'text/csv; charset=utf-8; header=present', :disposition => 'attachment; filename=payments.csv'
end

UI

function getCsv() {
    var ids = getSelectedRecordIds();
    params = {ids: ids}
    post_to_url("/payments/form_csv", params);
}

ここで、post_to_url - フォーム送信 トピックのような JavaScript 投稿リクエストからのメソッドです。

そして結局

protect_from_forgery :except => :form_csv

コントローラで、pay_csv リクエストの認証トークンを無効にします。

醜い決定ですが、それは私を助けます…もっと正しい方法があるかもしれません?

Viren、やってみます、ありがとう!

于 2012-06-19T07:08:46.943 に答える