2016-10-19 21 views
3

私はrails 3.2.22.4とruby 2.2.4を使用しています。私はsend_file機能をテストしています。私はサーバーログに「ファイルが送られました」が表示されますが、ブラウザにダウンロードされているのを見ることはできません。保存ボタンをクリックすると、この操作が呼び出されます。send_file/send_dataはダウンロード用ファイルを送信していません

def save_trunk_logs 
    device_id = params['device_id'] 
    trunk_name = params['trunk_name'] ||= "test" 
    data ="" 
    file = "#{trunk_name}.txt" 
    trunk_logs = TrunkStatusLog.select([:LogType, :LogMessage, :EpochLoggedAtTime]).where(DeviceID: device_id) 
    File.open(file, "w+") do |aFile| 
    aFile.write("Trunk Name : #{trunk_name}\n") 
    aFile.write("*"*100) 
    aFile.write("\n") 
    aFile.write("Time Stamp"+"\t"+"Log Message\n") 
    trunk_logs.each do |msg| 
     data =format_log_messages msg 
     aFile.write("#{data}\n") 
    end 
    end 
    send_file file, :type => 'text/plain; charset=UTF-8', :disposition => 'attachment' 
end 

このアクションは、button_toクリックイベントによって呼び出されます。

$("input[value='Download']").on('click', function() { 
    $.ajax({ 
     type: "POST", 
     url: "/dm/trunk_test_tools/save_trunk_logs?device_id="+selectedTrunkDeviceId+"&trunk_name="+selectedTrunkDeviceName, 
     } 
    }) 
}); 

私がダウンロードボタンを押すたびに2回の呼び出しが行われます。サーバー側のログが貼り付けられている

Started POST "/X/Y/save_trunk_logs?device_id=9&trunk_name=SIP_1" for  10.198.2.208 at 2016-10-24 12:58:58 +0530 
Processing by ABCController#save_trunk_logs as */* 
Parameters: {"device_id"=>"9", "trunk_name"=>"SIP_1"} 
Sent file SIP_1.txt (0.0ms) 
Completed 200 OK in 98.0ms (ActiveRecord: 62.0ms) 

Started POST "/X/Y/save_trunk_logs" for 10.198.2.208 at 2016-10-24 12:58:59 +0530 
Processing by TrunkTestToolsController#save_trunk_logs as HTML 
Parameters: {"authenticity_token"=>"3HSxduOUwccwo="} 
sent file test.txt (0.0ms) 
Completed 200 OK in 17.0ms (ActiveRecord: 3.0ms) 

2番目の呼び出しが行われた理由と作成元がわかりません。最初のサーバコールでは、fileは送信されたがダウンロードされていないと言います。 2番目の呼び出しでは、ダウンロードされたファイルも送信されます。しかしそれは役に立たない。パラメータが正しくない。真偽トークン私はパラメータとして送信していません(実際のデータクエリはスキップされます)。

何か助けがあります。 ありがとうございます。

+0

かもしれないソリューションがありますが、この 'send_file(ファイル:ファイル名=> 'my_file.txt')を試すことができますか'? – Sajan

+0

私はちょうどあなたのコードをコピーし、それは動作します。あなたがここに入れないものがあるかもしれませんか? – lcguida

+0

@lcguida私は自分のアプリケーション(テストアプリケーション)でも同じコードを試してみました。私は質問を修正して見てください。 – Ajith

答えて

0

このメソッドが機能する理由はわかりません。しかし、私の目的に役立ちます。

$("#btn_id").on('click', function() { 
    window.location = ypur api url; 
}); 

おかげで、

Ajith

関連する問題