2011-11-03 12 views
18

En las rutas tengo la ruta raíz que apunta a "home#index" pero cuando intento anularlo con after_sign_up_path_for, sigo redirigiéndome a la ruta raíz cuando inicio sesión o me registro. Intenté ponerlo tanto en el diseño del controlador subclassed como en el application_controller, pero no funcionó. ¿Qué debo hacer aquí?anulando el diseño after_sign_up_path_for not working

aplicación del controlador

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    def after_sign_up_path_for(resource) 
    show_cities_path(resource) 
    end 
end 

controlador de registro

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

rutas

root :to => "home#index" 

Respuesta

65

Si también tiene activado el módulo Confirmable, debe anular after_inactive_sign_up_path_for ya que un nuevo registro está "inactivo" hasta que se confirme. after_sign_up_path_for no parece ser llamado cuando Confirmable está activo.

+0

Gracias, que era mi problema. – MicFin

+0

¡Muchas gracias! estaba teniendo este problema también: D – marman

+0

Vale la pena señalar que esto se aplica a todos los casos en que un usuario está inactivo para iniciar sesión, por ejemplo, si anula 'active_for_authentication?' Esto incluye el caso confirmable donde el usuario está inactivo para iniciar sesión hasta que confirmen su cuenta . –

6

Luché con esta problema hasta que me di cuenta de que había olvidado declarar que estaba anulando el controlador de registros del dispositivo. En mi caso, estoy usando elaboren, con: recurso de usuario, por lo que este añadido a routes.rb:

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

Después de eso, la redirección que he especificado en after_inactive_sign_up_path_for trabajado.

Override devise registrations controller tiene una discusión más completa sobre este tema, con formas alternativas de declarar anulaciones.

11

Aunque llego tarde al juego, me encontré con este problema y tuve problemas para encontrar la solución.

Si está utilizando su propio RegistrationsController para personalizar Devise, entonces necesita agregar el método after_sign_up_path_for (resource) a ese controlador en lugar de ApplicationController.

En 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

Incluso pensé que la pregunta OP podría haber sido respondida mejor por otra respuesta, ¡este era el problema que estaba teniendo! – lfzawacki

0

Acabo de soplado alrededor de 2 horas en esto, pero LiveReload era mi problema. Me redireccionaban con éxito pero LiveReload estaba recogiendo el cambio en development.sqllite y anulando la solicitud.

0

En realidad, podemos ver el código fuente del dispositivo para resolver el problema y es fácil.

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 

Como demostración código:

 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)