2013-03-14 58 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