Rails Action Cable: ArgumentError in MessagesController#create - Wrong Number of Arguments (given 1, expected 2), error in Rails7

91 views Asked by At

I'm working on a Ruby on Rails application with Action Cable for real-time messaging. I've encountered an error in my MessagesController that I can't seem to resolve. Here are the details: Error Message:

ArgumentError in MessagesController#create
wrong number of arguments (given 1, expected 2)

MessagesContoller:

class MessagesController < ApplicationController
  before_action :require_user

  def create
    message = current_user.messages.build(message_params)

    if message.save
      ActionCable.server.broadcast "chatroom_channel", foo: message.body
    end
  end

  private

  def message_params
    params.require(:message).permit(:body)
  end
end

Additional Information: • My ChatroomChannel and JavaScript subscription code (chatroom.js) seem to be correctly set up. • I have checked that the channel name matches in both the server and client code. • The message_params method is correctly permitting the :body parameter.

// app/assets/javascripts/channels/chatroom.js

App.chatroom = App.cable.subscriptions.create("ChatroomChannel", {
  connected: function () {
    // Called when the subscription is ready for use on the server
  },

  disconnected: function () {
    // Called when the subscription has been terminated by the server
  },

  received: function (data) {
    // Called when the server broadcasts a message to this channel
    // You can handle the received data here, e.g., append the message to the chatroom UI
    console.log(data);
    console.log("Received data:", data);
    $("#message-container").append(data.foo);
  },
});

chatroom_channel.rb

module ApplicationCable
  class ChatroomChannel < ActionCable::Channel::Base

    def subscribed

      stream_from "chatroom_channel"
    end

  end
end

What could be causing this error, and how can I resolve it? Any insights or guidance on resolving this issue would be greatly appreciated. Thank you in advance for your help.

1

There are 1 answers

4
zaphodbln_ On

You have to wrap your message like this:

ActionCable.server.broadcast "chatroom_channel", {foo: message.body}

Notice the curly braces.

(https://api.rubyonrails.org/v7.1.0/classes/ActionCable/Server/Broadcasting.html)