手动路由和“无法找到具有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/new
(新用户路径)路由在/users/:id
(显示用户路径)之前定义。 Rails路由器可以正确地路由它们。