Как добавить обратный звонок после регистрации в Rails3 и Devise - PullRequest
9 голосов
/ 16 января 2011

Как добавить обратный вызов для создания учетной записи для зарегистрированного пользователя.

Файлы для разработки (registrations_controller.rb) находятся в папке controllers / devise Моя пользовательская модель имеет отношение has_many: account (а модель аккаунта имеет own_to: user)

Сначала я не знаю, куда добавить обратный вызов (какой файл?)

Тогда как автоматически создать новую учетную запись с правильным user_id зарегистрированного пользователя?

Заранее спасибо.

Ответы [ 4 ]

18 голосов
/ 27 апреля 2011

Вы можете переопределить контроллер регистрации devise, добавить обратный вызов для создания учетной записи, используя фильтры. Не забудьте назвать файл registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController
  after_filter :add_account 

  protected

  def add_account
    if resource.persisted? # user is created successfuly
      resource.accounts.create(attributes_for_account)
    end
 end
end

, тогда в вашем route.rb сообщите devise для использования переопределенного контроллера для регистрации

devise_for :users, controllers: { registrations: 'registrations'}
1 голос
/ 20 января 2011

Вот тема в группе Google, которая отвечает на ваш вопрос:

http://groups.google.com/group/plataformatec-devise/browse_thread/thread/6fc2df8d71f8b2f0

В основном, рекомендуется просто добавить метод rails "after_create" в вашу модель пользователя для запуска кодатебе нужно.

0 голосов
/ 18 сентября 2016

Сначала откройте свою версию устройства с помощью bundle open devise. Проверьте приложение / controllers / devise / registrations_controller.rb. Вы, вероятно, увидите метод, вызываемый в методе create, когда пользователь успешно зарегистрируется. Для моей версии (3.5.2) это sign_up.

На маршрутах вам понадобится

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

Вы можете определить свой собственный RegistrationsController следующим образом:

class RegistrationsController < Devise::RegistrationsController    
  protected

  def sign_up(_resource_name, user)
    super
    # do your stuff here
  end
end
0 голосов
/ 01 мая 2016

Я использую оба подхода.

after_create в модели для создания связанных данных и after_filter :send_notification_mailer, only: :create В RegistrationsController (так же, как @naveed)

, потому что в обратном вызове after_create я былполучено исключение ошибки ActiveJob::DeserializationError: Couldn't find User with id

при отправке с Active Job подтверждение по электронной почте в фоновом режиме с sidekiq, потому что пользователь иногда не сохранялся.

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