Как я могу заставить devise invitable использовать другую программу devise mailer, которую я установил в файле конфигурации?

#ruby-on-rails #devise #invitation

#ruby-on-rails #devise #приглашение

Вопрос:

В devise invitable приглашение! метод выполняет следующее:

 def invite!
        if new_record? || invited?
          self.skip_confirmation! if self.new_record? amp;amp; self.respond_to?(:skip_confirmation!)
          generate_invitation_token if self.invitation_token.nil?
          self.invitation_sent_at = Time.now.utc
          save(:validate => false)
          ::Devise.mailer.invitation_instructions(self).deliver
        end
      end
  

Однако, поскольку я хотел, чтобы devise использовала PostageApp, я создал новую программу под названием new_devise_mailer.rb, которая в основном такая же, как devise mailer, но наследует PostageApp.

В файле config / initialization /devise.rb я установил config.mailer = «NewDeviseMailer» вместо «Devise:Mailer».

Как модуль invitable может узнать, что нужно использовать новую программу рассылки?

Ответ №1:

Модуль invitable должен использоваться автоматически, NewDeviseMailer поскольку он вызывает Devise.mailer , а не Devise::Mailer и вы изменили программу рассылки по умолчанию в инициализаторе.

Комментарии:

1. хорошо, я понимаю, итак, Devise.mailer укажет на NewDeviseMailer . Должен ли NewDeviseMailer наследовать DeviseMailer, или я могу поступить так, как я описал, то есть использовать те же методы, но он наследуется от PostageApp, а не от ActionMailer?

2. Из того, что я понимаю из этого обсуждения , я думаю, вы могли бы попробовать class NewDeviseMailer < PostageApp::Mailer и сделать что-то вроде extend Devise::Mailer , чтобы сделать доступными методы класса Devise mailer.