Удалите аргумент из вызова метода Ruby в корне класса. На лету - PullRequest
1 голос
/ 04 октября 2011

Вот класс Ruby:

class User
  devise :trackable, :confirmable
end

В большинстве случаев я хочу, чтобы присутствовал :confirmable, но в некоторых случаях я хотел бы удалить :confirmable до создания экземпляра.

ВОПРОС: Как удалить :confirmable на лету?

Я бы предпочел не создавать отдельный класс.

Ответы [ 2 ]

4 голосов
/ 04 октября 2011

devise :confirmable добавляет в вашу модель несколько методов, один из которых skip_confirmation!:

Если вы не хотите, чтобы при создании создавалось подтверждение, а не код, который нужно сгенерировать, вызовите skip_confirmation!

Пример:

  user = User.new
  user.skip_confirmation!
1 голос
/ 04 октября 2011

Вам понадобятся миграции как для отслеживаемых, так и: подтверждаемых в любом случае для вашей БД.

Разве не было бы проще просто определить подтверждаемый для обоих случаев, но в случае, если он вам не нужен, вы можете автоматически подтвердить учетную запись пользователя из контроллера после создания пользователя?

см
https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb

строки 27..30 содержат хуки before_create и after_create

вам нужно будет сделать эту модификацию:

вам нужно переопределить: translation_required? , так что он возвращает истину только в тех случаях, когда вы хотите, чтобы был создан токен подтверждения и отправлено электронное письмо с подтверждением. В случае, если вам не нужно подтверждение по электронной почте, вы можете сделать user.confirm! после создания учетной записи пользователя. Вы можете добавить это как дополнительное действие after_create.

, например

module Devise
  module Models
     module Confirmable
       after_create  :confirm! , :if => :confirmation_not_required?    # you'll need to define that method

       private 
       def confirmation_required?   # overriding the default behavior
         your_special_conditions && !confirmed?
       end

       def confirmation_not_required?
         ! confirmation_required?
       end
     end
  end
end

Примечание: Вместо user.confirm! Вы также можете использовать user.skip_confirmation!

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