这更像是一个概念性的问题,因为我觉得我做错了:
我必须向满足某些条件的某些用户发送电子邮件。我现在所拥有的是:
1)基本上这样做的任务:
users = User.includes(:aptitudes).where({:role => ['Boy','boy','kid'], :aptitudes => {:name =>'Good'} })
users.each do |user|
MyMailer.report(user).deliver
end
2)在MyMailer的报告方法中,我有几件事:
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对象的特定属性或属性不满足要发送的电子邮件。我想知道我应该在哪里确保我传递给邮件程序的所有用户都会收到一封电子邮件?我可以在耙子中创建一个新方法来进行这些检查吗?或者你会怎么做?
答案 0 :(得分:1)
一般来说,只要名字显示出足够的意图,你就可以按照自己的意愿行事。
如果你给我这个MyMailer对象使用,不知道实现,我希望它在被请求时发送report
并且不会过滤掉自己的想法...最终处理其他问题(失败)发送,延迟,重试等)但是当我向用户提供想要该用户通过电子邮件发送时。
所以,回答你的问题,是的,我要么在调用Mailer之前过滤掉所有用户,要么在Mailer中定义一个名为report_only_those_users
的方法来处理过滤。
顺便说一句,您可以将电子邮件列表传递给ActionMailer(第2.3.4节),而无需一次循环发送一封。