我有一个简单的功能来防止在本地测试时向客户发送电子邮件:
def safe_emails emails
if Rails.env == 'production'
emails
else
emails.select{|e| ['staff@example.com', 'staff2@example.com'].include?(e) }
end
end
我想在邮件程序之间共享该功能。我可以看到两个选项,一个模块或一个类方法。
选项 1:模块
class ReportMailer < ActionMailer::Base
include SafeEmailer
def daily emails
mail_to: safe_emails(emails)
end
end
选项2:类方法
class ReportMailer < ActionMailer::Base
def daily emails
mail_to: SafeEmailer.safe_emails(emails)
end
end
由于全局范围,根据某些人的说法,类方法是禁止的,包括具有一种方法的模块似乎并不那么有吸引力。猴子修补 ActionMailer 以将方法扔在那里似乎也可能导致麻烦(当 Rails 4.3 引入 safe_emails 方法或其他方法时)。