2011-11-03 12 views
18

In itinerari ho la root-path che punta "home#index" ma quando provo a ignorare che con after_sign_up_path_for mi tiene il reindirizzamento al percorso principale quando accedo o registrati. Ho provato a metterlo in entrambi i controller sottoclasse e application_controller, ma non ha funzionato. Cosa devo fare qui?imperativi ideare after_sign_up_path_for non funziona

Applicazione regolatore

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    def after_sign_up_path_for(resource) 
    show_cities_path(resource) 
    end 
end 

controller di registrazione

class RegistrationsController < ApplicationController 
    def after_sign_up_path_for(resource) 
    show_cities_path(resource) 
    end 
end 

percorsi

root :to => "home#index" 

risposta

65

Se avete anche il modulo Confermabile attivato, è necessario eseguire l'override after_inactive_sign_up_path_for dal momento che un nuovo segno-up è "inattivo" fino a quando non è confermato. after_sign_up_path_for sembra non essere richiamato quando Confirmable è attivo.

+0

Grazie, che era il mio problema. – MicFin

+0

Grazie mille! stava avendo questo problema anche: D – marman

+0

Vale la pena notare che questo si applica a tutti i casi in cui un utente è inattivo per l'accesso, ad esempio se si esegue l'override di 'active_for_authentication?' Questo include il caso confermativo in cui l'utente è inattivo per il login fino a quando non confermano il proprio account . –

6

Ho lottato con questo problema fino a quando mi sono reso conto di aver dimenticato di affermare che stavo scavalcando il controller delle registrazioni di Devise. Nel mio caso, sto usando elaborare con il: utente risorsa, così ho aggiunto questo per routes.rb:

devise_for :users, :controllers => {:registrations => "registrations"} 

Dopo di che, il reindirizzamento che ho specificato nel after_inactive_sign_up_path_for funzionato.

Override devise registrations controller ha una discussione più completa su questo argomento, con metodi alternativi di dichiarazione degli override.

11

Anche se io sono in ritardo al gioco, ho appena eseguito in questo problema e ha avuto difficoltà a trovare la soluzione.

Se si utilizza il proprio RegistrationsController per personalizzare Devise, è necessario aggiungere il metodo after_sign_up_path_for (risorsa) a tale controller anziché ApplicationController.

In registrations_controller.rb:

private 

    def after_sign_up_path_for(resource) 
    new_page_path 
    end 

https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb

+0

Anche se la domanda OP avrebbe potuto essere servita meglio da un'altra risposta, questo era il problema che stavo avendo! – lfzawacki

0

Ho appena soffiato circa 2 ore su questo, ma LiveReload era il mio problema. Venivo reindirizzato successo ma LiveReload stava raccogliendo il cambiamento su development.sqllite e ignorando la richiesta.

0

In realtà, siamo in grado di visualizzare il codice sorgente di escogitare per risolvere il problema ed è facile.

devise-3.4.1 $ vim app/controllers/devise/registrations_controller.rb

# POST /resource 
    def create 
    build_resource(sign_up_params) 

    resource_saved = resource.save 
    yield resource if block_given? 
    if resource_saved 
     if resource.active_for_authentication? 
     set_flash_message :notice, :signed_up if is_flashing_format? 
     sign_up(resource_name, resource) 
     respond_with resource, location: after_sign_up_path_for(resource) 
     else 
     set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format? 
     expire_data_after_sign_in! 
     respond_with resource, location: after_inactive_sign_up_path_for(resource) 
     end 
    else 
     clean_up_passwords resource 
     @validatable = devise_mapping.validatable? 
     if @validatable 
     @minimum_password_length = resource_class.password_length.min 
     end 
     respond_with resource 
    end 
    end 

Come il codice visualizzato:

 if resource.active_for_authentication? 
     ... 
     respond_with resource, location: after_sign_up_path_for(resource) 

     else 
     ... 
     respond_with resource, location: after_inactive_sign_up_path_for(resource) 
Problemi correlati