0

这更像是一个概念性问题,因为我觉得我做错了:

我必须向一些满足某些条件的用户发送电子邮件。我现在拥有的是以下内容:

1)一个基本上做到这一点的任务:

users = User.includes(:aptitudes).where({:role => ['Boy','boy','kid'], :aptitudes => {:name =>'Good'} })
users.each do |user|
  MyMailer.report(user).deliver
end

2)在MyMailer的report方法中,我有几件事:

def report(user)

    @user = user
    @value = @user.value

    @travels = @user.travels.where(:end_at)

    @rewards = @user.rewards

    # More logic depending of values of User.

...

end

发生的情况是,在 Mailer 本身中,有时 @user 对象的特定属性或属性不满足要发送的电子邮件。我想知道我应该在哪里确保我传递给邮件程序的所有用户都会收到一封电子邮件?我应该在 rake 中创建一个新方法来进行这些检查吗?或者你会怎么做?

4

1 回答 1

1

一般来说,只要名字足够透露意图,你就可以为所欲为。

如果你给我这个 MyMailer 对象来使用,而不知道实现,我希望它report在请求时发送一​​个而不是过滤掉它自己的突发奇想......最终处理其他问题(发送失败、延迟、重试等) ) 但是当我给它一个用户时,我希望该用户收到电子邮件。

因此,要回答您的问题,是的,我要么在调用 Mailer 之前过滤掉所有用户,要么在 Mailer 中定义一个名为类似的方法report_only_those_users来处理过滤。

顺便说一句,您可以将电子邮件列表传递给ActionMailer(第 2.3.4 节),而不必一次循环发送一封。

于 2012-12-06T11:52:37.687 回答