Ruby on rails 以用户身份登录,从ActionMailer呈现视图

Ruby on rails 以用户身份登录,从ActionMailer呈现视图,ruby-on-rails,actionmailer,delayed-job,Ruby On Rails,Actionmailer,Delayed Job,我想通过电子邮件向用户发送作为特定用户登录的特定控制器操作的呈现html。不确定如何使用会话信息完全从控制器操作呈现电子邮件html。在后台任务中执行此操作会延迟作业。有没有办法在ActionMailer中呈现任意控制器操作?我会在您创建的后台任务中添加一些元数据,可以是延迟的作业,也可以是在控制器中保存当前用户id的resque 特别是在延迟作业中,您可以使用自定义作业:任何具有perform方法的对象都可以是作业。因此,创建一个MailerJob类,并在控制器中执行m=MailerJob.n

我想通过电子邮件向用户发送作为特定用户登录的特定控制器操作的呈现html。不确定如何使用会话信息完全从控制器操作呈现电子邮件html。在后台任务中执行此操作会延迟作业。有没有办法在ActionMailer中呈现任意控制器操作?

我会在您创建的后台任务中添加一些元数据,可以是延迟的作业,也可以是在控制器中保存当前用户id的resque

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


重要的是,您只需将用户id放入MailerJob类中,因为ActiveRecord对象通常不会很好地序列化所有对象,或者在过去的某一点上没有很好地序列化。

在这种情况下,您可能不需要使用后台工作程序。如果使用会话,则可以利用用户的会话访问该对象数据

我通常在应用程序控制器文件中写下:

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\u user对象,然后根据该对象传入自定义HTML。

传递id不是问题。我需要以延迟的_作业中的用户身份登录,并从MailerJob中呈现特定的控制器/操作。我基本上需要Ruby类MailerJob我建议只在邮件程序中重复您的图书查询,并在邮件程序视图中重复您呈现的一些html。因为你想提供电子邮件的纯文本版本,或者因为在邮件客户端查看HTML与在浏览器中查看HTML不同,我认为你必须进行更多的CSS内联操作,可能需要更改CSS和/或布局以获得正确的体验。我希望每周一以每个用户的身份登录,并按原样向他们发送书籍列表呈现于/:user_id/books。这是一个cron,不是用户请求。