确认邮件-如何避免代码重复

我的应用程序中有两个不同的过程,之后我想在每个过程完成后向用户发送确认电子邮件。我可以创建两个单独的邮件程序。 BankProcessMailerShopProcessMailer,但它们将包含以下相同的代码:

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
conquer20090630 回答:确认邮件-如何避免代码重复

如果仅更改subject和布局,则可以创建一个从BaseMailer继承的类,然后该类用于继承ShopProcessBankProcess,然后可以尝试像这样的东西:

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
本文链接:https://www.f2er.com/3158350.html

大家都在问