我知道這是一段時間,但最佳實踐永遠不會死,對吧?:)
電子郵件是按定義異步通信(除了確認電子郵件,但即使是這一個,它應該是一個最好的做法,以在必須確認之前留下延遲)。
因此,在我看來,送它最合理的方式是:
問題在Rails的是,它是太多回調沒有(如JS爲例):我personnaly覺得髒有這樣的代碼:
after_save :callback
def callback
if test_that_is_true_once_in_the_objects_life
Mailer.send_email()
end
end
所以,如果你真的想想像一個程序員,這個想法是在你的應用程序中設置一些自定義回調系統。
例如,
def run_with_callback(action, callback_name)
if send(action)
delay.send(callback_name)
end
end
甚至creating an event system in your app將是一個體面的解決方案。
但最終的解決方案是相當昂貴的時間,使人們最終行動了
def activate
[...]
user.save
Mailer.send_mail
respond_to
[...]
end
這是最接近時尚同步編程回調,並具有郵件程序調用處處結果後直列寫它(在Model
和Controller
)。
我看錯了嗎,還是你自相矛盾? 「直接在用戶成功創建後,我會將它寫入控制器。」那麼後來「由於陳述的原因,我認爲郵件調用應該是他們有意義的地方,通常這個模型就是那個地方。」 – Cameron 2014-09-17 22:26:06