手动路由和“无法找到具有id = new的用户”错误

我正在尝试为我的用户模型手动创建路由(不是使用“ resource: users ”),

所以在routes.rb

 get '/users/:id', to: 'users#show', as: 'user' get '/users/new', to: 'users#new', as: 'new_user' 

但是当我试图去/users/new我得到"Couldn't find User with id=new"

我确实理解它为什么会发生,但我想找到原样允许它(不改变其中一条路径)。 怎么可能?

路线的顺序很重要。 因为您已在new路线之前定义了show路线,所以show动作将以idnew执行。

交换两条路线的位置:

 get '/users/new', to: 'users#new', as: 'new_user' get '/users/:id', to: 'users#show', as: 'user' 

您可以按如下方式定义路线:

 get '/users', to: 'users#index' post '/users', to: 'users#create' get '/users/new', to: 'users#new', as: 'new_user' get '/users/:id/edit', to: 'users#edit', as: 'edit_user' get '/users/:id', to: 'users#show', as: 'user' put '/users/:id', to: 'users#update' delete '/users/:id', to: 'users#destroy' 

只要/users/new (新用户路径)路由在/users/:id (显示用户路径)之前定义。 Rails路由器可以正确地路由它们。