提问人:Afaq Khan 提问时间:11/3/2023 更新时间:11/3/2023 访问量:41
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
问:
我正在开发一个带有 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
可能导致此错误的原因是什么,我该如何解决? 有关解决此问题的任何见解或指导将不胜感激。提前感谢您的帮助。
答:
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 来改变它。
评论