💡

ActionCable.server.broadcastのArgumentErrorのエラー忘備録

2023/04/20に公開

今回起こったこと

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