我正在尝试按照GoRails.com上的actioncable指南创建一个ActionCable聊天室。
当我尝试连接到ActionCable时,我收到以下错误: NoMethodError - nil的未定义方法`safe_constantize':NilClass
[ActionCable] [User 1] Could not execute command from
{"command"=>"subscribe", "identifier"=>"
{\"ChatroomsChannel\":\"ChatroomsChannel\",\"room_id\":1}"})
[NoMethodError - undefined method `safe_constantize' for
nil:NilClass]: /Users/Mathias/.rvm/gems/ruby-
2.2.3@chatroomv1/gems/actioncable-
5.0.0.rc2/lib/action_cable/connection/subscriptions.rb:29:in `add' |
/Users/Mathias/.rvm/gems/ruby-2.2.3@chatroomv1/gems/actioncable-
5.0.0.rc2/lib/action_cable/connection/subscriptions.rb:15:in
`execute_command' | /Users/Mathias/.rvm/gems/ruby-
2.2.3@chatroomv1/gems/actioncable-
5.0.0.rc2/lib/action_cable/connection/base.rb:88:in
`dispatch_websocket_message' | /Users/Mathias/.rvm/gems/ruby-
2.2.3@chatroomv1/gems/actioncable-
5.0.0.rc2/lib/action_cable/server/worker.rb:54:in `block in invoke' |
/Users/Mathias/.rvm/gems/ruby-2.2.3@chatroomv1/gems/actioncable-
5.0.0.rc2/lib/action_cable/server/worker.rb:39:in `block in work'
我的app / channels / chatrooms_channel.rb看起来像这样:
def subscribed
@chatroom = Chatroom.find(params[:room_id])
#puts params[:room_id]
#current_user.join_room(@chatroom)
stream_from "chatrooms:#{@chatroom.id}"
# stream_from "some_channel"
end
也许值得一提的是我从rails 4升级到rails 5.0.0.rc2。
谢谢,
答案 0 :(得分:1)
assets/javascripts/channels/chatroom.coffee
中的
如果您需要指定params
,则频道名称也必须使用params哈希:
App['chatroom' + roomId] = App.cable.subscriptions.create {
channel: 'ChatroomChannel',
room_id: roomId
}, {
received: ->
...
}
只有当您不需要params
时,您才能在不使用哈希的情况下编写频道名称:
App.chatroom = App.cable.subscriptions.create 'ChatroomChannel',
received: ->
...