Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未找到订阅类';MyChannel';在行动中_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 4_Actioncable - Fatal编程技术网

Ruby on rails 未找到订阅类';MyChannel';在行动中

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”无法从执行命令 {“命令”=>“消息”, “标识符”=>“{\“频道\”:“会话频道\”}”, “数据”=

在使用Action Cable时,我遇到了一个问题,每当我运行程序时,我都会收到一个错误,上面写着
Subscription
classnotfound
ConversationChannel

当我试图发送消息时,我得到了这个日志

已成功升级到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