8

在默認情況下,邀請郵件的主題是更改devise_invitable郵件主題

mailer: 
     invitation_instructions: 
     subject: 'Invitation instructions' 

我想將其更改爲

subject: '%{invited_by} has invited you!' 

但是這需要有invited_by變量訪問的翻譯方法爲i18n。

如何在不更改默認行爲的情況下訪問/聲明此變量?

+0

抱歉打擾,但它看起來像你不要認爲我的答案值得你的賞賜,我對此有點好奇。 你認爲答案是錯誤的,或者它不夠詳細,或者什麼? – Alexis

+0

實際上,我投了票,我現在檢查它是否按預期工作。 –

回答

27

制定默認郵件不會爲你工作,但它很容易建立一個自定義的郵件程序,並定義有自己的subject_for幫手:

# in config/initializers/devise.rb: 
... 
config.mailer = "CustomDeviseMailer" 
... 
# in app/mailers/custom_devise_mailer.rb: 

class CustomDeviseMailer < Devise::Mailer 
    protected 

    def subject_for(key) 
    return super unless key.to_s == 'invitation_instructions' 

    I18n.t('devise.mailer.invitation_instructions.subject', 
     :invited_by => resource.invited_by.try(:full_name) || 'Someone') 
    end 
end 
+1

在某些時候,他們把它從一個字符串切換到一個符號,所以你可能需要使用return super,除非key ==:invitation_instructions – schpet

+0

增加'to_s'使代碼具有未來性 – kikito

+0

另外,我認爲這個答案值得標記作爲「正確」,@NickGinanto – kikito