Ruby on rails 设置为_param method后,无法创建嵌套资源

Ruby on rails 设置为_param method后,无法创建嵌套资源,ruby-on-rails,ruby,ruby-on-rails-5.2,Ruby On Rails,Ruby,Ruby On Rails 5.2,我有两个模型,房间和留言,房间有很多:留言 房间显示的url是房间/:房间id,我使用to_param方法将url显示为房间/:url\u令牌。之后,由于以下错误,我无法创建消息: ActionController::MessagesController中的UrlGenerationError#创建 没有路由匹配{:action=>“show”,:controller=>“rooms”,:room_url_token=>“ieghueja3wfgxuxqdr8segmzryjf2nwnoogwt

我有两个模型,房间和留言,房间
有很多:留言

房间显示的url是
房间/:房间id
,我使用
to_param
方法将url显示为
房间/:url\u令牌
。之后,由于以下错误,我无法创建消息:

ActionController::MessagesController中的UrlGenerationError#创建
没有路由匹配{:action=>“show”,:controller=>“rooms”,:room_url_token=>“ieghueja3wfgxuxqdr8segmzryjf2nwnoogwt5oapdgxgppzl6y368aqonrcbtlxewgxkh/D5eRam+cvgSTDh7wM2hFW4jqpnHoOw/rbdgnqnxn14y6h8gouqurdr4kj+ima==”,缺少必需的密钥:[:url_token]

我怎样才能修好它?或者如何使用消息更改文件室url?请帮忙

rake路由
结果

                  signup GET  /signup(.:format)                                                                        rooms#new
                      POST /signup(.:format)                                                                        rooms#create
        room_messages POST /rooms/:room_url_token/messages(.:format)                                                messages#create
                rooms POST /rooms(.:format)                                                                         rooms#create
             new_room GET  /rooms/new(.:format)                                                                     rooms#new
                 room GET  /rooms/:url_token(.:format)                                                              rooms#show
消息\u controller.rb

class MessagesController < ApplicationController
  before_action :set_room

  def create
    @message = @room.messages.new(message_params)
    if  @message.save
      flash[:success] = "posted"
      redirect_to @room
    else
      render 'new'
    end
  end

  private

    def message_params
      params.require(:message).permit(:name, :content)
    end

    def set_room
      @room = Room.find_by(url_token: params[:url_token])
    end
end
class RoomsController < ApplicationController
  before_action :set_room, only: :show

  def show
    @room = Room.find_by(url_token: params[:url_token])
    @messages = @room.messages.paginate(page: params[:page])
    @message = @room.messages.new
  end

  private

    def set_room
      @room = Room.find_by(url_token: params[:url_token])
    end 
end
在routes.rb中

Rails.application.routes.draw do
  resources :rooms, only: [:create, :new, :show], param: :url_token do
    resources :messages, only: [:create]
  end
end

根据您的路线:

room_messages POST /rooms/:room_url_token/messages(.:format)
它是发送到请求的
:room\u url\u token
参数,而不是
:url\u token

您可以在以下日志中查看:

Processing by MessagesController#create as HTML
  Parameters: {"utf8"=> ... "room_url_token"=>"ieghuEJA3WfgXuXqdR8XEGMZrYJF2nwnnoOGGwt5OApDGXGpPZL6Y368AqonrcbtLxeWgXkH/D5eRam+cvgSTDh7wM2hFW4jqpnHoOw/RbDgnQNxn14y6h8GouQRDR4Kj+IMmA=="}
消息控制器
中,修复
设置房间
方法,如下所示:

def set_room
  @room = Room.find_by(url_token: params[:room_url_token])
end

根据您的路线:

room_messages POST /rooms/:room_url_token/messages(.:format)
它是发送到请求的
:room\u url\u token
参数,而不是
:url\u token

您可以在以下日志中查看:

Processing by MessagesController#create as HTML
  Parameters: {"utf8"=> ... "room_url_token"=>"ieghuEJA3WfgXuXqdR8XEGMZrYJF2nwnnoOGGwt5OApDGXGpPZL6Y368AqonrcbtLxeWgXkH/D5eRam+cvgSTDh7wM2hFW4jqpnHoOw/RbDgnQNxn14y6h8GouQRDR4Kj+IMmA=="}
消息控制器
中,修复
设置房间
方法,如下所示:

def set_room
  @room = Room.find_by(url_token: params[:room_url_token])
end

欢迎来到堆栈溢出!您可以发布消息controller的控制器代码和更多日志文件吗?根据错误消息,您向请求发送
:room\u url\u token
参数,而不是
:url\u token
。你是如何尝试到达表演现场的?什么链接?谢谢你的评论!欢迎来到堆栈溢出!您可以发布消息controller的控制器代码和更多日志文件吗?根据错误消息,您向请求发送
:room\u url\u token
参数,而不是
:url\u token
。你是如何尝试到达表演现场的?什么链接?谢谢你的评论!它起作用了!非常高兴!!我用了一整天的时间来解决这个问题。真的谢谢你@不客气,很乐意帮忙。您可以将答案向上投票,并/或如果您满意,将其标记为已接受:)@nishikawayuichiro,也可以将
find_by
替换为
find_by-在发生错误时获取404 NoRecordFoundtoken@Vasilisa我明白了。谢谢你帮助我!它起作用了!非常高兴!!我用了一整天的时间来解决这个问题。真的谢谢你@不客气,很乐意帮忙。您可以将答案向上投票,并/或如果您满意,将其标记为已接受:)@nishikawayuichiro,也可以将
find_by
替换为
find_by-在发生错误时获取404 NoRecordFoundtoken@Vasilisa我明白了。谢谢你帮助我!