Ruby on rails 参数数目错误(0表示3..6)

Ruby on rails 参数数目错误(0表示3..6),ruby-on-rails,Ruby On Rails,我正在使用mailboxer gem,我希望将问题发送到用户收件箱,以便他们可以查看和回答问题 我收到一个参数错误参数数量错误(0代表3..6)。它指向行@message=current\u user.send\u message.new(:subject=>“您有一个来自{@question.sender\u id}”的问题, 我试图使用send message实例,因为原始代码行@message=current_user.messages.new(:subject=>“您有来自{@quest

我正在使用mailboxer gem,我希望将问题发送到用户收件箱,以便他们可以查看和回答问题

我收到一个参数错误
参数数量错误(0代表3..6)
。它指向行
@message=current\u user.send\u message.new(:subject=>“您有一个来自{@question.sender\u id}”的问题,

我试图使用send message实例,因为原始代码行
@message=current_user.messages.new(:subject=>“您有来自{@question.sender_id}的问题”
会将问题提交到通知表,但不会连接到对话表

问题:

def create
  @question = Question.new(params[:question])
  if @question.save
    #Original code @message = Message.create
    @message = current_user.send_message.new(:subject => "You have a question from #{@question.sender_id}",
                           #Original code :sender_id
                           :notification_id => @question.sender_id,
                           #Original code :recipient_id
                           :receiver_id => @question.recipient_id,
                           :body => @question.question)

    @question.message = @message
    @question.save
    redirect_to questions_path, notice: 'Your question was saved successfully. Thanks!'
  else
    render :new, alert: 'Sorry. There was a problem saving your question.'
  end
end

您收到错误是因为
send_message
方法(由mailboxer gem提供)需要3..6个参数,而您没有向其发送任何参数

另外,查看您的代码,您似乎正在尝试保存
问题的
消息
记录。因此,您的
@消息
应设置为:

@message = current_user.message.new(:subject => "You have a question from #{@question.sender_id}",
                           #Original code :sender_id
                           :notification_id => @question.sender_id,
                           #Original code :recipient_id
                           :receiver_id => @question.recipient_id,
                           :body => @question.question)
@question.message = @message
@question.save
注意我使用了
当前用户.message.new
而不是
当前用户.send\u message.new

编辑

要使用
send_message
,您至少需要传递3个参数:

send_message(recipient, "Body", "subject")
其中,
recipient
是接收邮件的人

我不知道为什么要在
发送消息
之后链接
新建
方法(通常调用它来创建类的新实例

您可以按如下方式调用
send_message

 @message = current_user.send_message(@question.recipient_id, @question.question, "You have a question from #{@question.sender_id}") 

我们可以看到
send_message
方法的实现吗?
send_message
仅在问题控制器的创建操作中。另一个位置在消息控制器中,用于创建操作
当前用户。send_message(@recipient,params[:body],params[:subject])
。就是这样,在您的评论中,您使用了3个参数作为
send\u message
方法,但在创建方法中,您使用了
当前用户。send\u message。new
(使用带有0参数的send\u message,而不是3..6)好的,我明白了。我想我一开始是用
主题
通知id
接收id
,和
正文
。我会做一些更改,看看进展如何。谢谢。我必须使用
发送消息
方法,否则它不会创建所需的
对话id
连接到对话表。您所做的更改是我以前所做的,这就是为什么我切换到另一个方法,因为它没有完成我需要的。我还没有尝试过代码,但我看不出这将如何工作,因为我需要指定主体和主题。您只需要在没有sp的情况下使用变量指定它们的用途。因此,我认为它不会使用您的更改连接到通知表。除非我完全理解错了。只是尝试了代码,但不幸的是,正如预期的那样,它不起作用。
未定义的方法
Fixnum的主键:Class
。它不会创建阻止它运行的
消息id`提交到通知表。我在
发送消息
之后使用
新建
方法的另一个原因是,我最初必须在将问题发送到通知表之前使用该方法,行为
@message=current\u user.messages.new
。因此我认为我应该保留新方法,因为它有效d以前。