1

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

4

2 回答 2

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。

于 2013-09-05T02:49:38.393 回答
0

我会向您创建的后台任务添加一些元数据(无论是使用delayed_job还是使用 resque),以将当前用户的 id 保存在您的控制器中。

特别是在延迟作业中,您可以使用自定义作业:任何具有perform方法的对象都可以是作业。因此,创建一个MailerJob类,并在您的控制器中m = MailerJob.new添加当前用户的 id。在您的perform方法中,您可以find为该用户做一个并获取您需要的任何内容。

重要的是,您只需将用户的 id 放入您的MailerJob类中,因为 ActiveRecord 对象通常不能很好地序列化所有内容(或者在过去的某个时间点没有很好地序列化)。

于 2013-09-05T01:41:54.800 回答