我可以在常规视图中使用Devise辅助方法,但不知道如何在我的Mailer中使用它。我需要确定用户是否已登录以构建正确的电子邮件消息。
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 :(得分:2)
实际上,你不能,而且最重要的是,你不应该在邮件程序中使用这种Devise助手。
为什么?好吧,如果你在user_signed_in?
帮助器中搜索Devise的代码库,你会在Devise::Controllers::Helpers
模块中找到它,你可以看到here。这意味着它应该在控制器上下文中使用,因为它使用仅在控制器上可用的方法,例如request
和warden
。
如果您必须根据用户是否已登录在邮件视图中做出任何决定,我建议您将此信息从控制器传递给邮件:
您的控制器:
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 %>
我希望它有所帮助!
答案 1 :(得分:0)
您可以从帮助程序传递它。像这样的东西
class UserMailer < ActionMailer::Base
def receipt
@is_signed = user_signed_in?
end
end
和
<% if @is_signed %>
Secret link
<% end %>