Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在ActionMailer中使用Desive助手?_Ruby On Rails_Ruby On Rails 4_Devise_Actionmailer - Fatal编程技术网

Ruby on rails 如何在ActionMailer中使用Desive助手?

Ruby on rails 如何在ActionMailer中使用Desive助手?,ruby-on-rails,ruby-on-rails-4,devise,actionmailer,Ruby On Rails,Ruby On Rails 4,Devise,Actionmailer,我可以在常规视图中使用Desive helper方法,但不知道如何在我的邮件程序中使用它。我需要确定用户是否已登录以构造正确的电子邮件 class UserMailer < ActionMailer::Base def receipt end end class UserMailer

我可以在常规视图中使用Desive helper方法,但不知道如何在我的邮件程序中使用它。我需要确定用户是否已登录以构造正确的电子邮件

class UserMailer < ActionMailer::Base
  def receipt
  end
end
class UserMailer
收据.text.erb

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

#错误:未定义#的“用户已登录”方法,您可以将其从帮助程序传递过来。像这样的

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


秘密链接

事实上,你不能而且最重要的是,你不应该在你的邮件上使用这种设计助手

为什么??好的,如果您在Deviate的代码库中搜索用户登录的帮助程序,您将在
Deviate::Controllers::Helpers
模块中找到它,如您所见。这意味着它应该在控制器上下文中使用,因为它使用的方法,如
请求
管理员
,仅在控制器上可用

如果您必须在邮件视图中根据用户是否已登录做出任何决定,我建议您将此信息从控制器传递给邮件发送人:

您的控制器:

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 %>
class UserController
您的邮件发送人:

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 %>
class UserMailer
您的邮件视图:

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 %>

秘密链接

我希望有帮助

假设一个用户在两台机器上收到这封电子邮件:一台是他登录的,另一台不是。你现在做什么?(提示:正确的电子邮件不应取决于用户的登录状态)您是否有上次登录时间的时间戳?设计可以提供这一点。然后使用活动记录获取该属性,并确定它是否在最后X分钟内。