Ruby on rails 为什么Rails会按照它的方式排列从资源创建的7条路由?
这纯粹是好奇。假设我有一个资源“Users”,并希望为其创建一组标准的7条路由。在我的路由文件中,我只需输入Ruby on rails 为什么Rails会按照它的方式排列从资源创建的7条路由?,ruby-on-rails,Ruby On Rails,这纯粹是好奇。假设我有一个资源“Users”,并希望为其创建一组标准的7条路由。在我的路由文件中,我只需输入resources:users。当运行rake routes时,我们得到的是: users GET /users(.:format) users#index POST /users(.:format) users#create new_user GET /users/new(.:format)
resources:users
。当运行rake routes
时,我们得到的是:
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
是不是有什么特别的原因让它这样订购?我知道将使用符合请求的第一条路由
我的困惑源于我的思维过程,即用户-显示路线将列在第三位,而不是新用户-处于该位置
如果有人能给我一些关于这个订购方案的见解,那就太好了。没有特别的原因说明为什么它们是这样的,它们就是这样 它可能源于旧的(我这里说的是1.2天)脚手架控制器布局,其中的动作是按顺序排列的
我能想象你在这里会遇到的唯一问题是,如果你有一个id为
new
的id
用户,它会首先进入userscoontroller\new
,而不是理想的userscoontroller\show
。解决方法相当简单:不要让用户将自己标识为“新的”。如果第三个是“显示用户”,那么/users/new
将尝试向用户显示:id
“新的”。我从:集合路由和:new
路由开始阅读它们,然后:成员
路由。嗯。。。我的意思是整行可以列在第三位,而不仅仅是交换控制器/动作。不,这就是我的意思。对不起,我不清楚。对/users/new
的请求将由与用户#show
路由匹配的第一条路由响应,在这种情况下,该路由被解释为具有:id
值的“new”。正如Ryan指出的,这很可能会返回404错误(或者弄脏你的应用程序),并且无论如何都会阻止你查看新的用户表单。啊,我现在明白了。谢谢这就是我所希望的答案。谢谢