Ruby on rails ApplicationMailer约定-在邮件程序中传递数据与查找

Ruby on rails ApplicationMailer约定-在邮件程序中传递数据与查找,ruby-on-rails,actionmailer,Ruby On Rails,Actionmailer,我注意到ApplicationMailer的公认约定是将内部逻辑保持在最低限度,并将所需数据传递到mailer方法本身,而不是在mailer方法内部查找数据(ActiveRecord记录)。我还没有找到一个解释,为什么这是首选,但谁能解释为什么这是一个趋势 例如: class FooMailer < ApplicationMailer # OK def foo_email(recipient, widget) @widget = widget mail(to: re

我注意到ApplicationMailer的公认约定是将内部逻辑保持在最低限度,并将所需数据传递到mailer方法本身,而不是在mailer方法内部查找数据(ActiveRecord记录)。我还没有找到一个解释,为什么这是首选,但谁能解释为什么这是一个趋势

例如:

class FooMailer < ApplicationMailer
  # OK
  def foo_email(recipient, widget)
    @widget = widget
    mail(to: recipient, from: 'foo@bar.com', subject: 'Your widget')
  end

######
# VS #
######

  # Not OK
  def foo_email(recipient)
    @widget = Widget.first
    mail(to: recipient, from: 'foo@bar.com', subject: 'Your widget')
  end
end
class FooMailer
谢谢大家!

一个字(好的,三个):

在前一个示例中,
ApplicationMailer
不需要了解有关您的模型的任何信息。而且,它不包含任何与选择
小部件相关的业务逻辑


在后一个示例中,
ActionMailer
需要(1)了解有关您的模型的一些信息(有一个叫做
Widget
)和(2)包含业务逻辑(
Widget.first

我觉得这就是原因。谢谢你的确认!