基本的に、私はすべてのストリーマーにブロードキャストされるデータベースにセーブをしようとしています。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
アップデート:私はそれを考え出しました。答えを参照してください。