0

我想通知用戶瀏覽器的模型狀態更改。我正在嘗試使用Rails的實時模塊。以下是我迄今爲止得到:Rails Live:動態發送從方法到瀏覽器的結果

require 'json' 
class Admin::NotificationsController < ActionController::Base 
    include ActionController::Live 

    def index 
    puts "sending message" 
    videos = Video.all 
    response.headers['Content-Type'] = 'text/event-stream' 
    begin 
     if(params[:id].present?) 
     response.stream.write(sse({id: params[:id]},{event: "video_encoded"})) 
     end 
    rescue IOError 

    ensure 
     response.stream.close 
    end 
    end 

    private 
    def sse(object, options = {}) 
     (options.map{|k,v| "#{k}: #{v}" } << "data: #{JSON.dump object}").join("\n") + "\n\n" 
    end 
end 

上述控制器背後的想法是,當它的URL獲取一個參數調用,它會發送此參數(在這種情況下,ID)給用戶。這裏是我在嘗試調用控制器:

notifications_path(id: video.id) 

但不幸的是,以下的事件監聽器在瀏覽器不火,就算我用捲曲挑起的事件:

var source = new EventSource('/notifications'); 
source.addEventListener("video_encoded", function(event) { 
    console.log("message") 
    console.log(event) 
}); 

這樣做的目標是,如果有變化,我想添加一個DOM元素到某個頁面(稍後)。可能有更好的方法,但Ruby Live似乎是一個合適的解決方案。任何提示或建議不同的方法,都表示讚賞。

+0

您的用例看起來不像'ActionController :: Live'的有效用例。您沒有向瀏覽器發送流式輸出。您一次檢查ID併發送JSON輸出。 – emaillenin

+0

那麼什麼是更好的方法來處理它呢? –

+0

使用常規控制器 – emaillenin

回答

0

您的用例似乎不是ActionController::Live的有效用例。您沒有向瀏覽器發送流式輸出。您一次檢查ID併發送JSON輸出。

使用常規控制器並通過AJAX而不是EventSource獲取請求。