Rails routes 路由有个小问题,不知何解

tiseheaini · 2012年09月13日 · 最后由 tiseheaini 回复于 2012年09月13日 · 2340 次阅读

在我写 routes 时出现了一个小问题 我的 routes 是这样写的

get "users/forget_password"
resources :users, :except => [:index, :destroy]

这样写时是没有问题的 但当我这样写时

resources :users, :except => [:index, :destroy]
get "users/forget_password"

就会提示错误

Started GET "/users/forget_password" for 127.0.0.1 at 2012-09-12 20:39:01 +0800
Processing by UsersController#show as HTML
  Parameters: {"id"=>"forget_password"}

怎么会这个样子呢 查看了一下 rake routes

     users 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
users_forget_password GET  /users/forget_password(.:format)   users#forget_password

不应该出问题呀?? 后来改成

get "users/forget_password"
resources :users, :except => [:index, :destroy]

就没问题了。。不知何解

forget_password 当成 :id 进去 users#show 了

#1 楼 @ywencn 是呀,不知道什么原因,是不是路由也可以覆盖呀?虽然问题解决了,但总觉得心里不舒服,强迫症又犯了

#2 楼 @tiseheaini 路由不是覆盖的,是自上向下先匹配到先用。

可以这么玩

constraints(:id => /[0-9]+/) do
resources :users, :except => [:index, :destroy]
end

#3 楼 @ashchan #4 楼 @ywencn 明白了,原来先匹配到 users/show/:id 的路由了,就先用它的了。后面写的 users/forget_password 就不好用了。这回弄明白了,哎呀,新手没经验呀!!!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号