バックグラウンドで大きなレポートファイルを生成する必要があります。ここには、OrderReport
オブジェクトを作成するための簡単なビューがあります。RailsアプリケーションでコントローラからjsにIDを送る方法
<%= simple_form_for order_report, remote: true do |f| %>
<%= f.input :start_date, as: :date, html5: true %>
<%= f.input :end_date, as: :date, html5: true %>
<%= f.submit "Generate report", id: "test" %>
<% end %>
とコントローラで何が起こっているのかその:
def create
order_report = OrderReport.new(order_report_params)
order_report.user = current_user
order_report.save
OrderReportJob.new(order_report).delay.perform
render nothing: true
end
ユーザーの後、このアクションは、レポートを生成するために、バックグラウンド・プロセスを作成し、送信ボタンをクリックしてください。私はこのバックグラウンドジョブのステータスをチェックするためにエンドポイントを書きました。このjsがこれはJSスクリプトの一部である
$.ajax({
url: report_url,
success: function(report) {
if(report.status === 'progress') {
$("#spin").show();
$interval = setInterval(checkStatus, 3000);
}
}
});
#test idで湖底を提出するonclick
機能です。それはうまくいきますが、作成したIDをこのjsファイルに送信する最後のステップはOrderReport
です。あなたはJSスクリプトで見ることができるように私が持っているreport_url
変数 - それは、すでにハードコードと
var report_url = '/order_reports/1'
だから主なアイデアはそれが可能だ場合、作成したOrderReport
のIDをキャッチすることですように見える、とJSでそれを使用していますスクリプト。どうすればそれを正しく渡すことができますか?
更新:
def create
order_report = OrderReport.new(order_report_params)
order_report.user = current_user
respond_to do |format|
if order_report.save
OrderReportJob.new(order_report).delay.perform
format.json { head :created, location: order_report }
else
format.json { head :unprocessable_entity }
end
end
end
head :created, location: order_report
が返されます。より多くのRESTfulなソリューションが要求に何が起こったのか、クライアントに伝えるために、意味のある応答コードを使用することです
order_report.js
$(function() {
$('#test').click(function() {
var report_url = '/order_reports/39'
$.ajax({
url: report_url,
success: function(report) {
if(report.status === 'progress') {
$interval = setInterval(checkStatus, 3000);
}
}
});
function checkStatus() {
$.ajax({
url: report_url,
success: function(report) {
if(report.status === 'done') {
clearInterval($interval)
}
}
});
}
});
});
あなたがjson'をレンダリング '試してみて、その時点でのレポートのIDを渡すことがありますか? –