2012-10-10 18 views
1

我試圖將我的應用程序的名稱放在郵件發送郵件的主題行中。使用電子郵件地址的默認設置,我沒有任何問題,但是當我嘗試將其添加到主題時,它會以純文本形式<%= app_name %>發送它。如何將動態內容放入動作郵件主題行中?

這裏是我的郵寄/ user_mailer.rb:

class UserMailer < ActionMailer::Base 
    add_template_helper(ApplicationHelper) 
    extend ApplicationHelper 

    default from: "#{app_name} <#{system_email}>" 

    def reset_password_email(user) 
    @user = user 
    @url = "#{root_url}/password_resets/#{user.reset_password_token}/edit" 
    mail(:to => user.email, 
     :subject => "Reset Your Password | #{app_name}") 
    end 
end 

這裏就是我在我的應用助手:

def app_name 
    'Tip Share' 
    end 

    def app_domain 
    'tipshare.herokuapp.com' 
    end 

    def system_email 
    '[email protected]' 
    end 

無論#{app_name}<%= app_name %>作品。我該怎麼做呢?

回答

1

您是否嘗試過加入這樣的:

include ApplicationHelper 
+0

是的,這沒有奏效。 –

0

通過與ApplicationHelper延長UserMailer,這些方法都可以作爲類方法 - 這就是爲什麼在default from: "#{app_name} <#{system_email}>"作品的參考。 在reset_password_email方法中,app_name將是一個未定義的局部變量。 因此,您需要另外購買include ApplicationHelper,或撥打電話self.class.app_name

+0

嗯,我試着在''reset_password_email'方法內部放入ApplicationHelper'',並且觸發了一個錯誤。我嘗試了'擴展ApplicationHelper'來代替它,但仍然以純文本形式提供了<%= app_name%>。如果我使用'#{app_name}',則沒有錯誤,但電子郵件無法傳送。如果我使用'<%= self.class.app_name%>'電子郵件不會傳遞。 –

+0

'include'語句是一個類級別的指令,就像你在示例代碼中的'extend'一樣。這些不在方法內部。 'extend'將來自命名模塊的方法添加爲類方法,而'include'將它們添加爲實例方法。 在您當前的'reset_password_email'方法中,您需要使用插值'#{app_name}'。既然你已經擴展了你的幫助器方法,我只需在這裏使用'#{self.class.app_name}',在這種情況下你不需要'include'。它是一個或另一個,都不需要。 – iosctr

相關問題