請原諒這種簡單和長度,但我有一個測試應用程序,它有一個用戶表,名稱,電子郵件和工資屬性。我創建了一個郵件程序,可以根據我的判斷將這些數據的報告發送給特定用戶,換句話說,當我單擊按鈕時。我的按鈕是使用link_to創建的,並在我的主users_controller中調用一個動作,然後調用郵件動作。 (我希望這是有道理的)。它看起來像下面這樣,正在按照我的希望工作;我只是希望知道這是做這樣的事情的正確方法:我這樣做是否正確 - 從link_to調用控制器的動作
在我users_controller(由腳手架生成創建):
def sendemail
@user = User.find(params[:id])
UserMailer.welcome_email(@user).deliver
redirect_to user_path(@user)
flash[:notice] = 'Email has been sent!'
end
在user_mailer.rb文件:
def welcome_email(user)
@user = user
@url = "http://example.com/login"
mail(:to => user.email,
:subject => "Welcome to My Awesome Site")
end
在用戶show.html.erb頁面,這是電子郵件被髮送方式:
<%= link_to "Send Email", sendemail_user_path(@user) %>
在我的routes.rb文件,讓一切都正確執行(其它):
resources :users do
member do
get 'sendemail'
end
所以,說了這麼多,它的工作原理就像它應該。我點擊用戶的show.html.erb頁面,在那裏我將顯示最終要顯示的數據和圖表,並根據我的判斷,我可以用這些數據向用戶發送一封電子郵件,或者我放入mailer.html.erb文件。當它被髮送時,它會閃爍我在控制器中指定的消息,並將我留在該頁面上,就像我指定的那樣;所以它的工作。我只想知道,這是正確的,最紅寶石/高尚的做事方式嗎?
感謝您的回覆和反饋。你能解釋一下你的意思嗎?「考慮通過後臺作業發送電子郵件以避免郵件阻塞當前線程」 – FattRyan 2011-04-06 19:45:40
@FattRyan - 當然。因此,在這種簡單的情況下,這並不是真的必要,但如果您試圖從控制器向陣列中的多個用戶發送電子郵件,則控制器方法會阻止,直到所有這些電子郵件都發出。您不必讓用戶等待Action Mailer完成發送這些電子郵件,而是希望在後臺發送這些電子郵件,並讓控制器儘快向用戶返回一個視圖。我的觀點是關於應用程序對用戶的響應。此外,如果電子郵件失敗,您希望控制器失敗(因此返回視圖失敗) – McStretch 2011-04-06 19:56:16
或者您是否想在後臺處理錯誤,並且如果出現任何錯誤,請在後臺重新發送電子郵件?如果可能的話,通常最好在主代碼路徑之外保留長操作。在電子郵件的情況下,通常可以將它們發送到幕後,並隨着將任何查看數據立即返回給用戶一起移動。這是否清除它? – McStretch 2011-04-06 19:57:45