【问题标题】:attr_accessor not accessible in mailer when using deliver_later使用 deliver_later 时无法在邮件程序中访问 attr_accessor
【发布时间】:2016-07-03 14:08:39
【问题描述】:

我正在使用 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 使用传递_later attr_accessor 时。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 actionmailer devise-invitable


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-08-02
      • 1970-01-01
      • 2020-08-07
      • 2017-03-08
      • 1970-01-01
      • 2019-05-29
      • 2013-08-13
      • 1970-01-01
      • 2015-05-22
      相关资源
      最近更新 更多