Rails Action Cable: ArgumentError in MessagesController#create - 参数数量错误(给定 1,预期 2),Rails7 错误

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

提问人:Afaq Khan 提问时间:11/3/2023 更新时间:11/3/2023 访问量:41

问:

我正在开发一个带有 Action Cable 的 Ruby on Rails 应用程序,用于实时消息传递。我在 MessagesController 中遇到了一个错误,我似乎无法解决。以下是详细信息: 错误信息:

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

其他信息: •我的ChatroomChannel和JavaScript订阅代码(chatroom.js)似乎已正确设置。 • 我已检查服务器和客户端代码中的通道名称是否匹配。 • message_params 方法正确允许 :body 参数。

// 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

可能导致此错误的原因是什么,我该如何解决? 有关解决此问题的任何见解或指导将不胜感激。提前感谢您的帮助。

Ruby-on-Rails WebPack 参数 ActionCable

评论

0赞 max 11/3/2023
隐式哈希文本(不带括号的哈希)。如果该方法不采用关键字参数,则只能用于将哈希作为位置参数传递。

答:

1赞 zaphodbln_ 11/3/2023 #1

你必须像这样包装你的信息:

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

注意大括号。

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

评论

0赞 Afaq Khan 11/3/2023
先生,问题已成功解决,但我认为我的连接没有正确建立,您能否也让我知道这个问题,因为我是 Ror 的 beiginer,我不知道如何顺利使用 Action Cable
0赞 zaphodbln_ 11/3/2023
嗯,这是另一个问题,远远落后于;)标题的答案。您必须提供更多的客户端代码。这里有这方面的指南:guides.rubyonrails.org/action_cable_overview.html
0赞 zaphodbln_ 11/3/2023
我个人不使用 ActionCable,而是使用 Turbo-Framework,它基于 Action Cable 构建。请看这里:turbo.hotwired.dev - 尤其是 Turbo Streams 可能会有所帮助。
0赞 max 11/3/2023
@zaphodbln_我删除了我的评论。我错过了这样一个事实,即它需要一个关键字 arg 来改变它。