如何在ActionMailer中使用Devise助手?

时间:2014-03-25 14:40:08

标签: ruby-on-rails ruby-on-rails-4 devise actionmailer

我可以在常规视图中使用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 %>

2 个答案:

答案 0 :(得分:2)

实际上,你不能,而且最重要的是,你不应该在邮件程序中使用这种Devise助手。

为什么?好吧,如果你在user_signed_in?帮助器中搜索Devise的代码库,你会在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 %>

我希望它有所帮助!

答案 1 :(得分:0)

您可以从帮助程序传递它。像这样的东西

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

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