NoMethodError - неопределенный метод `safe_constantize' для nil:NilClass

Я пытаюсь создать чат ActionCable, следуя руководству по actioncable на GoRails.com.

Когда я пытаюсь подключиться к ActionCable, я получаю следующую ошибку: NoMethodError - неопределенный метод `safe_constantize' для nil: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'

Мое приложение/каналы/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 5.0.0.rc2 с rails 4.

Спасибо,


person Mathias Spurr    schedule 24.08.2016    source источник
comment
Не знаком с action_cable, но кажется, что он ожидает channel в качестве ключа для имени канала, а не ChatroomsChannel, как у вас.   -  person Mladen Jablanović    schedule 24.08.2016


Ответы (1)


in 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: ->
    ...
person Фил    schedule 04.06.2017