2014-02-23 55 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文件夹中)