3

でアクションケーブルでの作業中に、私は私のプログラムを実行するたびに、私は、問題に直面しています、私はSubscriptionクラスConversationChannelサブスクリプションクラスのMyChannel "ActionCable

が見つかりませんというエラーを受信して​​、私が送信しようとすると見つからないサブスクリプションクラス を、私はこのログに

を取得したメッセージが正常のWebSocket(のWebSocket:GET、 HTTP_CONNECTION:アップグレード、HTTP_UPGRADE REQUEST_METHOD):にアップグレード "ConversationChannelは" { "コマンド" =>からのコマンドを実行できませんでした"message"、"{\" message \ ":\" conversation_id \ "、\" ConversationChannel \ "} \ "value \":\ "2 \"}、{\ "name \":\ "amitian_id \"、\ "value \":\ "1 \"}、{\ "name \":\ "body \ {"channel": "ConversationChannel"}サブスクリプションが見つかりませんでした。[RuntimeError - 識別子が のサブスクリプションを見つけることができませんでした。 "、"値 ":\"値\ ":\" "}]: C:/RailsInstaller/Ruby2.3.​​0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.1/lib/action_cable/connection/subscriptions.rb:74: find' | C:/RailsInstaller/Ruby2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.1/lib/action_cable/connection/subscriptions.rb:53:in perform_action '| C:/RailsInstaller/Ruby2.3.​​0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.1/lib/action_cable/connection/subscriptions.rb:17: execute_command' | C:/RailsInstaller/Ruby2.3.0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.1/lib/action_cable/connection/base.rb:88:in dispatch_websocket_message '| C:/RailsInstaller/Ruby2.3.​​0/lib/ruby/gems/2.3.0/gems/actioncable-5.0.1/lib/action_cable/server/worker.rb:58: `ブロック内の呼び出しに」

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 

conversation.js

App.conversation = App.cable.subscriptions.create("ConversationChannel", { 
    connected: function() { 

    }, 
    disconnected: function() { 

    }, 
    received: function(data) { 
    console.log(data['message']); 
    }, 
    speak: function(message) { 
    return this.perform('speak' , { 
    message: message 
    }); 
    } 
}); 

$(document).on('submit', '.new_message', function(e) { 
    e.preventDefault(); 
    var values = $(this).serializeArray(); 
    App.conversation.speak(values); 
    $(this).trigger('reset'); 
}); 

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_channel.rbファイルが見つからない理由を教えていただけますか?

答えて

1

ファイル名はconversation_channel.rbでなければなりません。snake_caseはチャンネルファイル名の規則です。

+0

を行う必要があります..あなたがあなたのファイル名が 'ConversationChannel.rb'であることを言及していないあなたのポストに任意のヘルプ –

+1

の。そうじゃないの?ファイル名にタイプミスがないか確認してください。 –

10

チャンネルファイルを1つ上のディレクトリに移動して解決しました。あなたのクライアント(JS)コードに完全なモジュール::クラス名を提供する必要がapp/channels/conversation_channel.rb

+0

チャームのように機能します!ありがとうございました! – Drew

0

からapp/channels/application_cable/conversation_channel.rb から

。例えば、あなたのConversationChannelクラスがクライアントの代わりに、ちょうどConversationChannelで、その後ApplicationCableモジュール内にある場合、あなたは私がそれを知っているApplicationCable::ConversationChannel

関連する問題