手动路由和"Couldn't find User with 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操作将在执行id的情况下执行new

交换两条路线的位置:

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/:id(显示用户路径)之前定义了/users/new(新用户路径)路由。Rails路由器将正确路由它们。

最新更新