2012-12-06 50 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