💡
ActionCable.server.broadcastのArgumentErrorのエラー忘備録
今回起こったこと
ActionCableを用いたリアルタイムチャット機能を実装しようとしたところ、
ActionCable.server.broadcast
メソッドを叩いた際にArgumentError
が発生した。
解決策がなかなか見つからなかったので、忘備録としてまとめました。
エラーが発生した部分
リアルタイムチャットの実装で調べるとよくでてくるコード。
def perform(message)
ActionCable.server.broadcast 'room_channel', message: render_message(message)
end
発生したエラー
引数の数がたりないよ!!
ArgumentError (wrong number of arguments (given 1, expected 2))
パーシャルも読み込めてるし、なぜ。。。
開発環境
Ruby 3.1.1
Rails 6.1.4
解決方法
ActionCable.server.broadcast
の第2引数を、ハッシュに変更。
# 変更前
ActionCable.server.broadcast 'room_channel', message: render_message(message)
# 変更後
ActionCable.server.broadcast 'room_channel', { message: render_message(message) }
chatGPTさんに聞いてみた
このエラーは、ActionCable.server.broadcastメソッドに渡す引数が期待される形式とは異なるために発生します。
ActionCable.server.broadcastメソッドは、チャンネル名と配信するデータを引数として受け取ります。>チャンネル名は文字列、配信するデータはハッシュとして渡す必要があります。
したがって、正しい引数の形式は次のようになります。
ActionCable.server.broadcast 'room_channel', { message: render_message(message) }
なるほど。
まとめ
探した限り、ActionCableに関する記事では、ほぼ全てがハッシュではなくシンボルで引数を渡す記述のものでした。
こういうとき、思い込みでなかなか解決策に辿り着けずに沼りがちです。。。
どなたかのお役に立てましたら幸いです!
いいねを押していただくと、モチベアップになりますのでぜひよろしくお願いします!
Discussion