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

时间:2014-03-10 22:05:04

标签: ruby-on-rails

我正在尝试为我的用户模型手动创建路线(不是使用“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"

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

2 个答案:

答案 0 :(得分:5)

路线的顺序很重要。由于您已在show路由之前定义了new路由,因此show操作将以id new执行。

交换两条路线的位置:

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

答案 1 :(得分:2)

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

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路由器可以正确地路由它们。