2017-01-06 9 views
0

基本的に、私はすべてのストリーマーにブロードキャストされるデータベースにセーブをしようとしています。actioncableで私のchat_channel.rbからブロードキャストできますが、私のモデルファイル(chat.rb)からはブロードキャストできません

クライアントからApp.call.speak()を呼び出すと、received()関数がトリガされ、警告が表示されるため、websocketストリームが動作していることがわかりました。

2番目の関数がコンソールに出力されるため、モデルのafter_create()メソッドが動作していることがわかりました。

ブロードキャスト機能(ActionCable.server.broadcastは())モデルから呼び出されているが、それは私がモデルからそれを呼び出したいchat_channel.rb

から行うように単純に機能していません。

chat.coffee

App.chat = App.cable.subscriptions.create "ChatChannel", 
    connected: -> 
    # Called when the subscription is ready for use on the server 

    disconnected: -> 
    # Called when the subscription has been terminated by the server 

    received: (data) -> 
    alert("hi") 

    speak: (message) -> 
    @perform 'speak', message: message 

chat_channel.rb

class ChatChannel < ApplicationCable::Channel 
    def subscribed 
    stream_from "chat" 
    end 

    def unsubscribed 
    # Any cleanup needed when channel is unsubscribed 
    end 

    def speak(message) 
    ActionCable.server.broadcast 'chat', message: "hello" 
    end 
end 

モデル/ message.rb

class Message < ApplicationRecord 
    belongs_to :user 

    after_create :broadcast, :print_out 

    def print_out 
    puts "print after create" 
    end 

    def broadcast 
    ActionCable.server.broadcast 'chat', message: "hello" 
    end 
end 

アップデート:私はそれを考え出しました。答えを参照してください。

答えて

0

私はレールコンソールでレコードを作成してブロードキャストしようとしていました。それは何もできませんでした。私がAjaxリクエストを使用したとき、すべてが期待どおりに機能しました。

関連する問題