2014-02-23 54 views
0

我使用FAYE無需刷新頁面就可以廣播聊天消息,並且如果硬編碼通道,它就可以工作。但我想在一個變量傳遞從我的消息控制器,並使用它作爲頻道播出,這樣我可以有2人將導軌變量轉換爲js erb

在應用程序/視圖/消息/ create.js.erb之間的私人聊天

<% broadcast @channel do %> 
$("#chat").append("<%= escape_javascript render(@message) %>"); 
<% end %> 
$("#new_message")[0].reset(); 

如果我將@channel更改爲「/ messages」,它將正常工作,並且我的消息將在郵件存儲在數據庫中後立即顯示在當前正在查看「/ messages」頻道的所有人的屏幕上。

在我的消息控制器I有

def private 
... 

@channel = "/"[email protected]_s+"chatwith"+ @id2.to_s 

... 

end 

這使得讓每兩個人聊了,只有他們有機會獲得一個獨特的渠道。其他用戶不允許進入該頁面,也無法訪問該通道,這是控制器中其他代碼完成的功能。

我只需要在每次發送消息時在create.js.erb中訪問@channel,這樣它就會被廣播到該特定聊天的正確專用通道。

我該怎麼做?

回答

0

問題是你已經定義了一個私有方法裏面@channel,所以它不能被視圖訪問,移動@channel變量的公共方法裏面,或使已有的方法public

def <my_method> 
    ....... 
    @channel 
    ....... 
end 
+0

不是這種情況。該方法可能被稱爲「私人」,但這並不意味着它是一種私人方法。 – user2943464

0

我想通在我的控制器中使用respond_to。起初,我試圖在我的消息控制器的私人聊天方法中使用它,但最終並沒有奏效。但我注意到在我的消息控制器的create方法中的respond_to調用正在工作,並且它是如何將消息傳遞給create.js.erb並在硬編碼通道時廣播的。所以我決定在創建方法中聲明@channel而不是消息控制器的privatechat方法,現在所有的工作都是按照我希望的方式進行的。

0

您可以在相應的控制器操作中設置變量值,並且它可用於與操作名稱匹配的任何視圖文件(在適當的視圖子文件夾中 - 例如articles_controller,create action對應於create.js.erb文件在views/articles文件夾中)