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我明白了。谢谢你帮助我!