我正在使用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 %>
当我仅使用传递时,邮件显示在邮件程序上,但是当我在邮件程序视图中使用nil中的deliver_later attr_accessor时。
答案 0 :(得分:3)
attr_accessor
无法正常工作,因为deliver_later
会将您的用户对象序列化为GlobalID。当传递作业运行时,作业进程将从数据库重新加载您的用户(当然,该对象不包括对象上的任何实例变量)。您可能需要将消息传递给作业(也许您可以将其隐藏到*args
,(手