2013-03-14 61 views
0

我很困惑我需要做什么样的设计决策。使用ActionMailer设计决策

我知道那的ActionMailer的基本使用情况,你会:

  • 创建一个类从ActionMaier继承
  • 定义有一个什么样的方法来发送和谁把它发送和从谁等

这是我偏离和失去理解。

通常情况下,你会调用该方法在某个动作的控制你的邮件模式,为前

def create 
@user = User.new(params[:user]) 
if @user.save 
    MyMailerClass.send_signup_email(@user).deliver 
    redirect_to @user 
else 
    render :new 
end 
end 

如果比如我要发送基于如果用户不是招”的电子邮件在X天内登录。我确信有很多方法可以做到这一点,但对铁轨最佳实践方式感到好奇,因为我不确定在哪里寻找。 This is close我不希望它发送取决于一天的时间,只要满足某些条件。

谢谢。

回答

2

这听起来像是你想要定期运行的cron作业来检查某些条件并根据这些条件发送电子邮件。这与标准邮件程序所做的并不相距太远,除了不是从控制器发送它,您将从单独的脚本发送它。我平时写耙子任务是:

task :send_reminder_emails => :environment do 
    users = User.where('last_login <= ?', 10.days.ago) 
    users.each do |user| 
    MyMailerClass.reminder(user).deliver 
    end 
end 

而且你将与rake send_reminder_emails运行它。如果您不熟悉如何设置cron作业,可以使用大量示例。

+0

我相信这正是它,欣赏的关注。 – 2013-03-14 23:10:06

+0

对于这个特别简单的情况,把逻辑放在rake任务中已经足够清楚了。对于更复杂的情况,我会将逻辑放入您从rake调用的方法中,并测试该方法。 Timecop可以很好地测试正确的事情是否会在正确的时间发生。 – 2014-03-10 20:04:05