Ruby on rails 如何在ActionMailer中使用Desive助手?
我可以在常规视图中使用Desive helper方法,但不知道如何在我的邮件程序中使用它。我需要确定用户是否已登录以构造正确的电子邮件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
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分钟内。