2014-03-25 22 views
2

我可以在常規視圖中使用Devise helper方法,但不知道如何在我的Mailer中使用它。我需要確定用戶是否已登錄才能構建正確的電子郵件。如何在ActionMailer中使用Devise helpers?

class UserMailer < ActionMailer::Base 
    def receipt 
    end 
end 

receipt.text.erb

<% if user_signed_in? %> #Error: undefined method `user_signed_in?' for #<#<Class:0x35695fc> 
    Secret link 
<% end %> 
+0

假設用戶在兩臺機器上收到此電子郵件:一個是他登錄的,另一個是他不是。現在你在做什麼? (*提示:正確的電子郵件不應取決於用戶的登錄狀態*) –

+0

您是否有最後登錄時間的時間戳?設計可以提供這一點。然後使用活動記錄來獲取該屬性並確定它是否在最後X分鐘。 – Ash

回答

2

其實,你不能,最重要的,你不應該使用這種設計的幫手在您的郵件。

爲什麼?那麼,如果您搜索Devise的user_signed_in?幫手的代碼庫,您可以在Devise::Controllers::Helpers模塊中找到它,您可以看到here。這意味着它應該在控制器上下文中使用,因爲它使用的方法只能在控制器上使用,例如requestwarden

如果必須基於用戶是否登錄,否則不會在你的郵件視圖的任何決定,我會建議你從你的控制器將此信息傳遞給您的郵件:

你的控制器:

class UserController < ApplicationController 
    def your_action 
    UserMailer.receipt(user_signed_in?).deliver 
    #.... 
    end 
end 

您的郵件:

class UserMailer < ActionMailer::Base 
    def receipt(signed_in) 
    @signed_in = singed_in 
    #.... 
    end 
end 

您的郵件視圖:

<% if @signed_in %> 
    Secret link 
<% end %> 

我希望它能幫助!

0

您可以通過從助手通過。事情是這樣的

class UserMailer < ActionMailer::Base 
    def receipt 
    @is_signed = user_signed_in? 
    end 
end 

<% if @is_signed %> 
    Secret link 
<% end %> 
相關問題