2017-10-15 1 views
0

Ich habe diese routes.rb:ändern Standard-Routen Entwickeln Rails

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

Ich änderte sign_in und sign_up Routen und wenn Sie sign_up gehen, werden Sie Fehler 404 erhalten, statt /registration funktionieren wird. Was ich möchte, ist ändern und fügen Sie andere Routen wie Passwort vergessen auf die gleiche Weise. Wenn ich in der Konsole eingeben rake routes, ich sehe das Passwort für vergessen:

new_user_password GET /password/new(.:format) ersinnen/Passwörter # new

Wie kann die zusätzliche Routen hinzufügen in einer Weise, dass meine benutzerdefinierte Route funktioniert, aber nicht die Standardeinstellung?

Antwort

0

Achten Sie darauf, die ActionDispatch :: Routing :: Mapper # devise_for Dokumentation here.

Sie können einfach nur etwas tun, wie this-

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

Ja habe ich versucht, 'path_names: {password: '/ forgotten-password'},', aber es URL wie diese generieren http: // localhost: 3000/vergessen/neu, das will ich nicht String 'new' – gdfgdfg

0

Hier ist ein Beispiel für die Sitzungen, Registrierungen und Passwörter Controller-Aktionen/Routen:

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 

Wie im vierten Code gesehen Beispielblock in this wiki

+0

Ich weiß, wie man das macht für: Sitzungen,: Registrierungen. Es ist nicht dasselbe für: Passwörter und ich weiß nicht was ist. Deshalb frage ich. – gdfgdfg

+0

Das Gleiche gilt für Passwörter. Hast du mein Beispiel oben für Passwörter ausprobiert? Sie müssen den Controller zuerst überspringen, dann redeclare –

1

Sie müssen passwords übersprungen und seine Routen neu erstellen, wie Sie wollen,

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 

Ende

werden Ihre eigenen Routen arbeiten. Und es überspringt alle Routen in diesen Modulen.

HINWEIS: Sie müssen alle verbleibenden Routen dieses Moduls überschreiben, wie Sie möchten.

+0

Hallo, ja, ich habe das getan. Das Problem ist, dass es PUT- und PATCH-Anfragen für dieselbe URL und Aktion gibt, und wenn ich es in routes.rb ändern - 'match '/ forgotten-password =>' users/passwords # update ', wie:: password, via: [: put,: patch] 'und dann die Standardansicht von Devise verwenden. die für das Formular generierte URL - '<% = form_for (Ressource, wie: Ressourcenname, URL: Passwort_Pfad (Ressourcenname),' ist '/ vergessen.User', was nicht die richtige URL ist. – gdfgdfg

+0

Oh, du musst alle Routen formatieren Sie müssen sich auch um den Schlüssel ': as' kümmern, da die Update-Routen basierend auf der Ressource ' als:: possword' nicht funktionieren Bitte zur Kasse gehen Antwort aktualisieren –

+0

Nach dem Ändern der Routen, bitte neu starten Server.so können Ihre neuen Routen verstehen. –