2017-10-15 150 views
0

我有這個routes.rb更改默認路由設計的Rails

devise_for :users, :path => '', path_names: 
          { sign_in: "login", sign_out: "logout", sign_up: "registration"} 

我改變sign_insign_up路線,如果你去sign_up你會得到404錯誤,而不是/registration會工作。我想要的是以相同的方式更改並添加其他路由,如忘記密碼。 如果我在控制檯rake routes型,我認爲這對於忘記的密碼:

new_user_password GET /password/new(.:format)設計/密碼#新

如何添加額外的路線以我自定義的定義路線的方式工作,但不是默認的?

回答

0

一定要簽出ActionDispatch :: Routing :: Mapper#devise_for文檔here

你可以只是簡單的做一些像這個 -

devise_for :users, path: 'auth', path_names: { sign_in: 'login', 
               sign_out: 'logout', 
               password: 'secret', 
               confirmation: 'verification', 
               unlock: 'unblock', 
               registration: 'register', 
               sign_up: 'cmon_let_me_in' } 
+0

是的我試過這個,'path_names:{password:'/ forgotten-password'},',但它生成的URL像這樣http:// localhost:3000/forgotten/new,我不想這樣字符串'新' – gdfgdfg

0

這裏是會議,註冊和密碼控制器動作/路線的例子:

devise_for :users, skip: [:sessions, :registrations, :passwords] 

devise_scope :user do 
    # sessions 
    get 'login', to: 'devise/sessions#new',  as: :new_user_session 
    post 'login', to: 'devise/sessions#create', as: :user_session 
    delete 'logout', to: 'devise/sessions#destroy', as: :destroy_user_session 
    # registrations 
    put '/account', to: 'devise/registrations#update' 
    delete '/account', to: 'devise/registrations#destroy' 
    post '/account', to: 'devise/registrations#create' 
    get '/register', to: 'devise/registrations#new', as: :new_user_registration 
    get '/account', to: 'devise/registrations#edit', as: :edit_user_registration 
    patch '/account', to: 'devise/registrations#update', as: :user_registration 
    get '/account/cancel', to: 'devise/registrations#cancel', as: :cancel_user_registration# passwords 
    # passwords 
    get 'new-pass', to: 'devise/passwords#new', as: :new_user_password 
    get 'edit-pass', to: 'devise/passwords#edit', as: :edit_user_password 
    patch 'edit-pass', to: 'devise/passwords#update', as: :user_password 
    post 'new-pass', to: 'devise/passwords#create', as: :user_password 
end 

由於在第四代碼所示this wiki

+0

我知道如何做到這一點:會議,:註冊。這是不一樣的:密碼,我不知道是什麼。這就是我問的原因。 – gdfgdfg

+0

它與密碼相同。你有沒有嘗試過我的例子密碼?你必須先跳過控制器然後重新聲明 –

1

您需要跳過passwords並根據需要重建其路線,

devise_for :users, skip: [:passwords] 
devise_scope :user do 
    match '/forgotten-password' => 'devise/passwords#create', as: :user_password, via: [:post] 
    match '/forgotten-password' => 'devise/passwords#update', via: [:put, :patch] 
    get 'forgotten-password', to: 'devise/passwords#new', as: :new_user_password 

您的自定義路線會工作。並跳過該模塊中的所有路由。

注意:您需要根據需要覆蓋該模塊的所有剩餘路由。

+0

嗨,是的,我做到了。問題是,對於同一個URL和動作,如果我在routes.rb - match'/ forgotten-password'=>'users/passwords#update'中修改了PUT和PATCH請求,如::password,通過:[:put,:patch]'然後使用Devise的默認視圖。爲表單生成的URL - <%= form_for(resource,as:resource_name,url:password_path(resource_name),'是'/ forgotten.user',這不是正確的URL – gdfgdfg

+0

哦,你需要格式化所有路由以及你需要照顧的關鍵':as',因爲設計更新路線基於資源。 'as::possword'不工作。 請結帳更新的答案答案 –

+0

更改路線後,請重新啓動服務器,所以設計可以理解你的新路線。 –