NoMethodError - nil的未定义方法`safe_constantize':NilClass

时间:2016-08-24 19:37:16

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-5 actioncable

我正在尝试按照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。

谢谢,

1 个答案:

答案 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: ->
    ...