使用delivery_later时在邮件程序中无法访问attr_accessor

pow*_*wer 5 ruby-on-rails actionmailer ruby-on-rails-4 devise-invitable

我正在使用devise_invitable邀请用户加入应用程序,因为我想在电子邮件中添加自定义消息。所以我的代码看起来像这样。

#user.rb
attr_accessor :message

def self.invite(emails, message)
  User.invite!({email: email}) do |user|
    user.message = message
  end
end

#here I am overriding devise_invitable method to send mails later
def send_devise_notification(notification, *args)
  devise_mailer.send(notification, self, *args).deliver_later
end

#users_controller.rb
def invite_user
  User.invite(params[:email], params[:message]) 
end    

#invitation_instructions.html.erb
<% if @resource.message %>
  <p><%= @resource.message %></p>
<% end %>    
Run Code Online (Sandbox Code Playgroud)

当我只使用传递时,邮件上会显示消息,但是当我在邮件视图中使用nil中的delivery_later attr_accessor时。

cam*_*cam 4

attr_accessor不起作用,因为deliver_later将您的 User 对象序列化为GlobalID。当交付作业运行时,作业进程将从数据库中重新加载您的用户(当然不包括对象上的任何实例变量)。您可能需要将消息传递给工作(也许您可以将其潜入*args,(手