Ruby on rails 缺少参数或值为空:对话

Ruby on rails 缺少参数或值为空:对话,ruby-on-rails,parameters,Ruby On Rails,Parameters,以下是此线程的后续内容: 我有下面一行: 但是当我点击按钮时,我得到了错误:参数丢失或值为空:conversation 我可以看到,conversation不在参数散列中:{“authenticity_token”=>“r5pwStXl6NwEgqqq0GT0RQxCqsGHrTVsh4Q7HviX+re5k+XOs2ioRv9kZqvDGz9Ch/6O6D1nOMjscquHQJlB+g=”,“接收方id=>“1”,“发送方id=”>“2”,“控制器”=>“对话”,“操作”=>“创建” 正如在

以下是此线程的后续内容:

我有下面一行:

但是当我点击按钮时,我得到了错误:
参数丢失或值为空:conversation

我可以看到,
conversation
不在参数散列中:
{“authenticity_token”=>“r5pwStXl6NwEgqqq0GT0RQxCqsGHrTVsh4Q7HviX+re5k+XOs2ioRv9kZqvDGz9Ch/6O6D1nOMjscquHQJlB+g=”,“接收方id=>“1”,“发送方id=”>“2”,“控制器”=>“对话”,“操作”=>“创建”

正如在另一个线程中所建议的,将
require(:conversation)
添加到控制器是很有帮助的:

class ConversationsController < ApplicationController
  before_action :authenticate_user!

  # GET /conversations
  # GET /conversations.json
  def index
    @users = User.all

    # Restrict to conversations with at least one message and sort by last updated
    @conversations = Conversation.joins(:messages).uniq.order('updated_at DESC')
  end

  # POST /conversations
  # POST /conversations.json
  def create
    if Conversation.between(params[:sender_id], params[:recipient_id]).present?
      @conversation = Conversation.between(params[:sender_id], params[:recipient_id]).first
    else
      @conversation = Conversation.create!(conversation_params)
    end

    redirect_to conversation_messages_path(@conversation)
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def conversation_params
      params.require(:conversation).permit(:sender_id, :recipient_id)
    end
end
类会话控制器

这项工作已经进行了一段时间,但由于某种原因,它停止了工作。我该如何解决这个问题?为什么它停止工作了?

将“对话”手动添加到哈希中似乎有效:

我还必须修复控制器以考虑嵌套:

def create
  if Conversation.between(params[:conversation][:sender_id], params[:conversation][:recipient_id]).present?
    @conversation = Conversation.between(params[:conversation][:sender_id], params[:conversation][:recipient_id]).first
  else
    @conversation = Conversation.create!(conversation_params)
  end

  redirect_to conversation_messages_path(@conversation)
end