我想通过电子邮件向用户发送以特定用户身份登录的特定控制器操作的呈现html。不确定如何从具有会话信息的控制器操作完全呈现电子邮件html。在后台任务(delayed_job)中执行此操作。有什么方法可以在ActionMailer中呈现任意控制器动作吗?
答案 0 :(得分:0)
我会将一些元数据添加到您创建的后台任务中(使用delayed_job
或resque),以保存控制器中当前用户的ID。
特别是在延迟工作中,您可以使用自定义作业:任何具有perform
方法的对象都可以成为一项工作。因此,创建一个MailerJob
类,并在控制器中执行m = MailerJob.new
并添加当前用户的ID。在perform
方法中,您可以为该用户执行find
并抓取您需要的任何内容。
重要的是你只需将用户的id放入MailerJob
类,因为ActiveRecord对象通常不能很好地序列化(或者在过去的某个点上没有很好地序列化)。
答案 1 :(得分:0)
在这种情况下,您可能不需要使用后台工作程序。如果使用会话,则可以利用用户的会话来访问该对象数据。
我通常在应用程序控制器文件中写出这个:
def set_current_user
if session[:user_id]
@current_user = User.find(session[:user_id])
end
end
def require_current_user
set_current_user
redirect_to root_path unless @current_user
end
根据您想要实际使用邮件程序的控制器,您只需传递@current_user对象并根据该对象传递自定义HTML。