以用户身份登录,从ActionMailer渲染视图

时间:2013-09-05 01:32:58

标签: ruby-on-rails actionmailer delayed-job

我想通过电子邮件向用户发送以特定用户身份登录的特定控制器操作的呈现html。不确定如何从具有会话信息的控制器操作完全呈现电子邮件html。在后台任务(delayed_job)中执行此操作。有什么方法可以在ActionMailer中呈现任意控制器动作吗?

2 个答案:

答案 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。