2012-12-06 53 views
0

发送电子邮件到特定的用户这更像是一个概念上的问题,因为我有我这样做不对的感觉:逻辑在Rails的

我有电子邮件发送到一些用户满足一定的条件。我现在所拥有的是以下几点:

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 

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

回答

1

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

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

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

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

+0

每个电子邮件都有特定的数据要发送...不是所有的电子邮件都是一样的:) - 我的问题是,我应该在哪里做过滤?在任务本身创建一个方法? –

+0

是的,在那种情况下,我会这样做。过滤用户,让Mailer负责处理正文内容。 – Tallmaris