Как создать профиль после регистрации пользователя в Rails3 & Devise - PullRequest
5 голосов
/ 14 января 2011

Я делаю простой пользователь с профилем приложения.Пользователь регистрируется и автоматически входит в систему. Пока работает нормально.Теперь я хотел бы создать профиль после успешной регистрации и перенаправить пользователя в его / ее профиль.

У меня есть модель пользователя и контроллер.Devise также создал контроллер регистрации.Я установил драгоценный камень.Я скопировал файлы devise и планирую переопределить действие create.

Во-первых, что бы я ни редактировал в registrations_controller.rb, ничего не меняется.

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

Во-вторых, как вставить создание профиляшаг?

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

Я думал добавить

 current_user.create_profile under is resource.active?

Как бы вы, ребята, решили этот вопрос?

1 Ответ

4 голосов
/ 14 января 2011

Во-первых, пожалуйста, отформатируйте свой пост и используйте blocks for the snippets. That way it becomes very readable.</p> <p>Coming to your problem: Devise by default sign ins and redirects to application root_path, after registration. If you wish to redirect to some other path you can specify it in a couple of ways. One is to specify root_path for your devise reource. So in your case it will be</p> <pre><code>match '/user/profile/new' => 'profiles#new', :as => 'user_root'

Это будет перенаправлять вас на profile#new каждый раз, когда вы входите в систему. Чтобы предотвратить перенаправление на profile#new каждый раз, вы можете добавить before_filter на profile#new, чтобы проверить, существует ли профиль, и перенаправить на какую-то другую страницу, скажем, панели мониторинга, если профиль существует.

Вот ссылка, показывающая, как изменить redirect_path для devise: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-in

...