How to properly expand Devise Recoverable?

I want the Recoverable module to send emails with a reset prompt for my users (the invitation-only application), I partially declare the methods in the initializer:

module Devise
  class Mailer
    def invite_new_user(record)
      devise_mail(record, :invitation_instructions)
    end
  end
end

module Devise
  module Models
    module Recoverable
      def send_invite_user_instructions!
        return unless status == User::STATUS_PENDING
        generate_reset_password_token!
        ::Devise.mailer.invite_new_user(self).deliver
      end
    end
  end
end

And the restored one expands beautifully, but it says that my mail program does not have the invite_new_user method (rails console output):

1.9.2p290 :002 > user.send_invite_user_instructions! 
  User Load (1.4ms)  SELECT "users".* FROM "users" WHERE "users"."reset_password_token" = 'zMQK1CEXYupjNKpH8dph' LIMIT 1
   (0.3ms)  BEGIN
   (15.0ms)  UPDATE "users" SET "reset_password_token" = 'zMQK1CEXYupjNKpH8dph', "updated_at" = '2012-05-01 17:40:32.085256' WHERE "users"."id" = 59
   (4.5ms)  COMMIT
NoMethodError: undefined method `invite_new_user' for Devise::Mailer:Class

but the call has a method in the same console session:

1.9.2p290 :003 > ::Devise.mailer.method_defined? 'invite_new_user'
 => true 

What am I missing?

+5
source share
1 answer

Customization can be customized for what you need:

1 - Create a class Mailerin the app / mailers / auth_mailer.rb file and inherit fromDevise::Mailer

class AuthMailer < Devise::Mailer
  def invite_new_user(record)
    devise_mail(record, :invitation_instructions)
  end
end

2 - config/initializers/devise.rb

config.mailer = 'AuthMailer'

3- () ( ) , ​​ SideKiq DelayedJob, , AuthMailer . config/environment/development.rb

config.eager_load = true

4 - send_invite_user_instructions! User , Devise


: Rails-, , , : (), , , , .

+2

All Articles