Ruby on rails 未找到订阅类';MyChannel';在行动中
在使用Action Cable时,我遇到了一个问题,每当我运行程序时,我都会收到一个错误,上面写着Ruby on rails 未找到订阅类';MyChannel';在行动中,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,actioncable,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,Actioncable,在使用Action Cable时,我遇到了一个问题,每当我运行程序时,我都会收到一个错误,上面写着SubscriptionclassnotfoundConversationChannel 当我试图发送消息时,我得到了这个日志 已成功升级到WebSocket(请求方法:GET, HTTP_连接:升级,HTTP_升级:websocket)订阅类 未找到:“ConversationChannel”无法从执行命令 {“命令”=>“消息”, “标识符”=>“{\“频道\”:“会话频道\”}”, “数据”=
Subscription
classnotfoundConversationChannel
当我试图发送消息时,我得到了这个日志
已成功升级到WebSocket(请求方法:GET,
HTTP_连接:升级,HTTP_升级:websocket)订阅类
未找到:“ConversationChannel”无法从执行命令
{“命令”=>“消息”,
“标识符”=>“{\“频道\”:“会话频道\”}”,
“数据”=>“{\”消息“:[{\”名称“:\”对话id\”,\”值“:\”2\”,{\”名称“:”阿米蒂安id\”,\”值“:”1\”,{\”名称“:”身体“,”值“:”nmm\”,”动作“:”说话“})
[运行时错误-找不到标识符为的订阅:
{“频道”:“对话频道”}]:
C:/RailsInstaller/Ruby2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.1/lib/action\u-cable/connection/subscriptions.rb:74:in
find'|
C:/RailsInstaller/Ruby2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.1/lib/action\u-cable/connection/subscriptions.rb:53:in
执行\u操作'|
C:/RailsInstaller/Ruby2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.1/lib/action\u-cable/connection/subscriptions.rb:17:in
执行_命令'|
C:/RailsInstaller/Ruby2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.1/lib/action\u cable/connection/base.rb:88:in
dispatch\u websocket\u message'|
C:/RailsInstaller/Ruby2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.1/lib/action\u-cable/server/worker.rb:58:in
`调用中的块'
ConversationChannel.rb
class ConversationChannel < ApplicationCable::Channel
def subscribed
# stream_from "some_channel"
stream_from "conversations-#{current_amitian.id}"
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
stop_all_streams
end
def speak(data)
message_params = data['message'].each_with_object({}) do |el, hash|
hash[el.values.first] = el.values.last
end
ActionCable.server.broadcast(
"conversations-#{current_amitian.id}",
message: message_params
)
end
end
connection.rb
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_amitian
def connect
self.current_amitian = find_verified_amitian
end
protected
def find_verified_amitian
if(current_amitian = env['warden'].amitian)
current_amitian
else
reject_unauthorized_connection
end
end
end
end
模块应用程序表
类连接
使用上面给出的日志文件,有人能告诉我为什么找不到我的
conversation\u channel.rb
文件吗?您的文件需要命名为conversation\u channel.rb
,因为snake\u case是rails对频道文件名的约定。我通过将频道文件向上移动一个目录解决了这个问题
来自app/channels/application\u cable/conversation\u channel.rb
要
app/channels/conversation\u channel.rb
您必须在客户端(JS)代码中提供完整的模块::类名。例如,如果您的ConversationChannel
类位于ApplicationCable
模块内,那么在您的客户端中,而不仅仅是ConversationChannel
您需要执行ApplicationCable::ConversationChannel
您在帖子中提到的文件名是ConversationChannel.rb
。不是这样吗?检查文件名是否有任何打字错误?
class ConversationChannel < ApplicationCable::Channel
def subscribed
# stream_from "some_channel"
stream_from "conversations-#{current_amitian.id}"
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
stop_all_streams
end
def speak(data)
message_params = data['message'].each_with_object({}) do |el, hash|
hash[el.values.first] = el.values.last
end
ActionCable.server.broadcast(
"conversations-#{current_amitian.id}",
message: message_params
)
end
end