Подтверждение почтовых программ - как избежать дублирования кода - PullRequest
2 голосов
/ 05 ноября 2019

У меня в приложении два разных процесса, после которых я хочу отправить пользователю электронное письмо с подтверждением после завершения каждого процесса. Я мог бы создать два отдельных почтовых, например. BankProcessMailer и ShopProcessMailer, но они будут содержать один и тот же код, как показано ниже:

class BankProcess < BaseMailer
  layout 'bank_process'

  def send_email(email)
    mail_headers = headers(email)
    mail(mail_headers)
  end

  private

  def headers(email)
    super(email).merge(subject: 'Bank process')
  end
end

Есть ли шанс обработать один почтовик с двумя разными представлениями и темами, чтобы избежать дублирования кода и не создавать новыйпочтовая рассылка для ShopProcessMailer как показано ниже?

class ShopProcess < BaseMailer
  layout 'shop_process'

  def send_email(email)
    mail_headers = headers(email)
    mail(mail_headers)
  end

  private

  def headers(email)
    super(email).merge(subject: 'Shop process')
  end
end

1 Ответ

2 голосов
/ 05 ноября 2019

Если к изменениям относятся только subject и макет, вы можете создать класс, который наследуется от BaseMailer, который затем используется для наследования ShopProcess и BankProcess от, тогда вы можете попробовать что-то вроде этого:

class ConfirmationMailer < BaseMailer
  protected

  def send_email(email)
    mail_headers = headers(email)
    mail(mail_headers)
  end

  def headers(email)
    super(email).merge(subject: SUBJECT)
  end
end

# frozen_string_literal: true

class BankProcess < ConfirmationMailer
  SUBJECT = 'Bank process'
  layout 'bank_process'
end

# frozen_string_literal: true

class ShopProcess < ConfirmationMailer
  SUBJECT = 'Shop process'
  layout 'shop_process'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...