2012-07-09 41 views
3

我正在使用Ruby,並且我需要在控制器中執行長時間運行的任務時向用戶發送持續更新狀態消息。如何將數據從控制器發送到ruby中的視圖

該方法在數據庫中插入一些行。我想要向用戶顯示如下消息:

正在上載,插入的文件數量爲X.

目前我使用LoadMask jQuery插件,但它只顯示一個簡單的消息,我不知道如何發送中斷過程中插入的行數。

+0

你可能必須以某種方式代表在數據庫中長時間運行的任務,或至少將其存儲在會話中。然後在你的控制器中添加一個新的方法,它可以返回當前狀態的消息,並通過頁面中的AJAX進行輪詢。我懷疑你可以方便地將更新推送到長時間運行的控制器的視圖中。 – millimoose 2012-07-09 22:26:02

回答

1

您應該考慮將這個長時間運行的過程轉移到後臺任務,以便您可以立即向用戶提供反饋。一旦提交了後臺作業,根據您的後臺處理引擎,您將能夠檢查作業的狀態。跟蹤自己的狀態可能很簡單(取決於您的任務)。使用Redis或只是在你的數據庫(爲此創建一個單獨的表)。作業提交後,您需要返回可用於輪詢更新的作業的ID。

創建一個新的控制器(或操作),您可以使用jQuery + Ajax並輪詢更改。給它一個作業ID(以前的操作返回其)

也請看看: 王菲:http://faye.jcoglan.com/http://railscasts.com/episodes/260-messaging-with-faye 巨人:http://postrank-labs.github.com/goliath/

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

延遲工作,Resque等

哦,如果你只是在尋找一個簡單的文件上傳進度指示器,看看這個Rails, upload progress bar

您可以嘗試流媒體技術爲好,大量的信息在這裏: Ruby on Rails 3: Streaming data through Rails to client

+0

我已決定運行一個後臺任務,運行任務。爲此,我在後臺發現了非常有用的Railscast#127 Rake [link](http://railscasts.com/episodes/127-rake-in-background/) – 2012-07-10 18:05:03

0

這是Rails中的常見需求,使用JQuery通常是正確的方法。

雖然控制器和視圖代碼的細節取決於你如何建立你的應用程序,這裏有一個良好的開端:

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

一件事您需要考慮的是如何定期向您的方法報告迄今爲止插入的行數。你有辦法做到這一點嗎?

首先回顧railscast - 它會讓你瞭解如何進行至少下一步。

+0

這個答案似乎缺乏實際內容。 「看看這個與你的問題切線相關的指南」是不夠的。 – millimoose 2012-07-09 22:24:00

+0

你的問題缺乏實際的代碼。如果你不那麼好,我不能給出具體的答案,包括代碼。當我第一次學習如何動態地對網頁進行AJAX更新時,那個railscast幫助我開始了,我認爲它也可以幫助你。 – 2012-07-09 22:33:11

+0

這不是我的問題。 (OP的評論標有用戶名後面的淡藍色背景。)如果問題缺乏細節,最好要求澄清而不是隻發佈任何內容。儘管這些材料可能最終會有所幫助,但它並沒有涉及OP *提到的幾個細節,因此並不是真正解決問題的答案。 – millimoose 2012-07-10 09:44:16

相關問題