新手问题 Devise 与 User 用户的路由规则冲突了,怎么解决?

diguage · 2013年11月21日 · 最后由 TsingHan 回复于 2013年11月21日 · 2881 次阅读

十万个为什么

为“十万个为什么”而努力!

问题描述

现有路由器规则如下:

get 'my', to: 'users#profile'
get 'my/books', to: 'users#books'

devise_for :users, :controllers => {:omniauth_callbacks => 'users/omniauth_callbacks'} 
resources :users, only: [:show, :edit, :update] do
  member do
    get :avatar
  end
  resources :books
end

执行rake routes后,输出如下:

                      my GET      /my(.:format)                                 users#profile
               my_books GET      /my/books(.:format)                          users#books
        new_user_session GET      /users/sign_in(.:format)                      devise/sessions#new
            user_session POST     /users/sign_in(.:format)                      devise/sessions#create
    destroy_user_session DELETE   /users/sign_out(.:format)                     devise/sessions#destroy
 user_omniauth_authorize GET|POST /users/auth/:provider(.:format)               users/omniauth_callbacks#passthru {:provider=>/weibo/}
  user_omniauth_callback GET|POST /users/auth/:action/callback(.:format)        users/omniauth_callbacks#(?-mix:weibo)
           user_password POST     /users/password(.:format)                     devise/passwords#create
       new_user_password GET      /users/password/new(.:format)                 devise/passwords#new
      edit_user_password GET      /users/password/edit(.:format)                devise/passwords#edit
                         PUT      /users/password(.:format)                     devise/passwords#update
cancel_user_registration GET      /users/cancel(.:format)                       devise/registrations#cancel
       user_registration POST     /users(.:format)                              devise/registrations#create
   new_user_registration GET      /users/sign_up(.:format)                      devise/registrations#new
  edit_user_registration GET      /users/edit(.:format)                         devise/registrations#edit
                         PUT      /users(.:format)                              devise/registrations#update
                         DELETE   /users(.:format)                              devise/registrations#destroy
             avatar_user GET      /users/:id/avatar(.:format)                   users#avatar
             user_books GET      /users/:user_id/books(.:format)              books#index
                         POST     /users/:user_id/books(.:format)              books#create
          new_user_book GET      /users/:user_id/books/new(.:format)          books#new
         edit_user_book GET      /users/:user_id/books/:id/edit(.:format)     books#edit
              user_book GET      /users/:user_id/books/:id(.:format)          books#show
                         PUT      /users/:user_id/books/:id(.:format)          books#update
                         DELETE   /users/:user_id/books/:id(.:format)          books#destroy
               edit_user GET      /users/:id/edit(.:format)                     users#edit
                    user GET      /users/:id(.:format)                          users#show
                         PUT      /users/:id(.:format)                          users#update

问题

  1. 访问/users/password/edit(修改密码)页面,直接重定向到/users/:user_id/edit页面。并且,提示“您已经登录”。 为什么会成重定向?如何才能不重定向?
  2. 对于用户注册修改用户信息修改密码等 URL,有没有一种比较好的命名规则?

环境

  1. Rails 3.2.14
  2. Devise 3.0.3

/users/password/editdevise 提供的找回密码功能的一个路由,收到的重置链接就是这个路由后面加上一个生成的一次性 token,用于忘记密码。如果用户登录当然就重定向到 /users/:user_id/edit 了,这个才是编辑个人资料功能,修改密码也是在这个路由下实现的 Ps:第一问的 devise 部分详见 devise 的 password 控制部分 第二问么,看看 devise 的介绍

给 deivse 重新定义个 path devise_for :users, :path => "user_account" ?

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