2011-01-14 21 views
5

Estoy haciendo un usuario simple con la aplicación de perfil. Los registros de usuario y se registran automáticamente. Funciona bien hasta el momento. Ahora, me gustaría crear un perfil después de un registro exitoso y redirigir al usuario a su perfil.Cómo crear un perfil después del registro de usuario con Rails3 & Devise

Tengo un modelo de usuario y un controlador. Devise también creó el controlador de registro . Instalé la gema. Copié sobre los archivos y planeo anular la acción de crear.

En primer lugar, lo que edite en registrations_controller.rb nada cambios.

class Devise::RegistrationsController < ApplicationController 
prepend_before_filter :require_no_authentication, :only => 
[ :new, :create, :cancel ] 
prepend_before_filter :authenticate_scope!, :only => 
[:edit, :update, :destroy] 
include Devise::Controllers::InternalHelpers 

En segundo lugar, cómo insertar el paso de creación de perfil?

def create 
    build_resource 

    if resource.save 
    if resource.active? 
     set_flash_message :notice, :signed_up 
     sign_in_and_redirect(resource_name, resource) 
    else 
     set_flash_message :notice, :inactive_signed_up, :reason => 
resource.inactive_message.to_s 
     expire_session_data_after_sign_in! 
     redirect_to after_inactive_sign_up_path_for(resource) 
    end 
    else 
    clean_up_passwords(resource) 
    render_with_scope :new 
    end 
end 

Estaba pensando añadir

current_user.create_profile under is resource.active? 

¿Cómo ustedes frente a ese problema?

Respuesta

4

Primero, formatee su publicación y utilice < código > bloques para los fragmentos. De esa forma se vuelve muy legible.

Llegando a su problema: Diseñe de forma predeterminada inicios de sesión y redirecciona a la aplicación root_path, después del registro. Si desea redireccionar a otra ruta, puede especificarla de varias maneras. Una es para especificar root_path para su fuente de recursos. Así que en su caso será

match '/user/profile/new' => 'profiles#new', :as => 'user_root' 

Esto le redirigirá a profile#new cada vez que se conecte. Para evitar el redireccionamiento a profile#new, cada vez puede agregar un before_filter en profile#new para verificar si el perfil existe y redirigirlo a alguna otra página, por ejemplo, tableros, si el perfil existe.

Aquí es el vínculo que muestra cómo cambiar redirect_path de legado: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-in

+0

Hola Pravin, gracias. Voy a probar. Solo necesita pasar el parámetro de identificación de usuario a continuación. – Olivier

+0

Creo que puedes hacerlo con current_user – Pravin

+0

¿Cómo debo actualizar sign_in_and_redirect (resource_name, resource) a 'user_root' – Olivier

Cuestiones relacionadas