Профиль пользователя, созданный автоматически после регистрации Devise, не будет отображаться в макетах - PullRequest
0 голосов
/ 09 сентября 2011

Я хотел бы создать профиль после того, как пользователь зарегистрируется на моем сайте с помощью Devise.Поэтому в пользовательской модели я добавляю: after_create :build_spec

def build_spec
  Spec.new(:user_id => :id)
end

У меня также есть view / layouts / _header.html.erb, который имеет ссылку на Spec:

<%= link_to "Profile", spec_path(Spec.find_by_user_id(current_user.id)) %>

Thisсоздает проблемы, когда пользователь только что заполнил форму регистрации и нажал кнопку регистрации.Он будет направлен на какую-то страницу.На данный момент, я думаю, что объект Spec для этого пользователя не был создан, поэтому ссылка в частичном _header не работает (объект nil), и пользователь получил ошибку:

No route matches {:action=>"show", :controller=>"specs"}

(Очевидно,У меня был SpecsController с действием «show»)

У меня вопрос: как создать Spec для зарегистрированного пользователя, прежде чем он будет перенаправлен на первую страницу после регистрации (чтобы сделать ссылку на Specработает)?

Комментарии и советы очень нужны.

1 Ответ

1 голос
/ 11 сентября 2011

Переопределите действие after_sign_up в Devise RegistrationsController.

https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-up-%28registration%29

Что будет выглядеть так:

class RegistrationsController < Devise::RegistrationsController
protected

  def after_sign_up_path_for(resource)
    Spec.create(:user_id => resource.id)
    after_sign_in_path_for(resource)
  end
end

Опять же, ваш метод может работатьтакже, если вы только что заменили Spec.new(:user_id => :id) на Spec.create(:user_id => :id) Spec.new просто создает новый экземпляр Spec, но фактически не сохраняет его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...