3

私はRubyを使用しており、コントローラーで長時間実行されるタスクが実行されている間、一定の更新ステータスメッセージをユーザーに送信する必要があります。

このメソッドは、データベースにいくつかの行を挿入します。私が欲しいのは、ユーザーに次のようなメッセージを表示することです:

アップロードが進行中です。X 個のファイルが挿入されました。

現在、LoadMask jQuery プラグインを使用していますが、単純なメッセージしか表示されず、プロセスを中断せずに挿入された行数を送信する方法がわかりません。

4

2 に答える 2

1

この長時間実行されるプロセスをバックグラウンド タスクに移行することを検討してください。そうすれば、ユーザーにすぐにフィードバックを返すことができます。バックグラウンド ジョブが送信されると、バックグラウンド処理エンジンによっては、ジョブのステータスを確認できるようになります。自分でステータスを追跡するのはおそらく簡単です (タスクによって異なります)。Redis を使用するか、データベースでのみ使用します (このために別のテーブルを作成します)。ジョブが送信されたら、更新をポーリングするために使用できるジョブの ID を返す必要があります。

jQuery + Ajax を使用して変更をポーリングできる新しいコントローラー (またはアクション) を作成します。job_id を与える (前のアクションが返したもの)

以下もご覧ください: Faye : http://faye.jcoglan.com/ , http://railscasts.com/episodes/260-messaging-with-faye /

http://railscasts.com/episodes/229-polling-for-changes

遅延ジョブ、レスキューなど

簡単なファイル アップロードの進行状況インジケーターを探しているだけの場合は、このRails のアップロード進行状況バーを参照してください。

ストリーミング手法も試すことができます。これに関する多くの情報がここにあります: Ruby on Rails 3: Streaming data through Rails to client

于 2012-07-09T22:37:25.010 に答える
0

これは Rails での一般的なニーズであり、JQuery を使用することは一般的に正しいアプローチです。

コントローラーとビューのコードの詳細は、アプリケーションをどのように構築したかによって異なりますが、ここから始めるのが良いでしょう:

Railscast #136: jQuery : http://railscasts.com/episodes/136-jquery/

考慮する必要があることの 1 つは、これまでに挿入された行数をメソッドから定期的に報告する方法です。それを行う方法はありますか?

最初に railscast を確認してください。これにより、少なくとも次のステップに進む方法を理解できます。

于 2012-07-09T22:22:11.900 に答える