ruby-on-rails - 使用deliver_later时,邮件程序中无法访问attr_accessor

标签 ruby-on-rails ruby-on-rails-4 actionmailer 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 %>    

当我只使用deliver 时,邮件显示在邮件程序上,但是当我在邮件程序 View 上以nil 使用deliver_later attr_accessor 时。

最佳答案

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

关于ruby-on-rails - 使用deliver_later时,邮件程序中无法访问attr_accessor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38170767/

相关文章:

ruby-on-rails - Rails Mailer "Net::OpenTimeout: execution expired"仅生产服务器上的异常

ruby-on-rails - 如何在 ruby​​ on rails 中手动搭建脚手架和更新属性?

ruby-on-rails - CarrierWave 文件上传在 rails 中不起作用

ruby-on-rails-3 - 如何在 Rails 3 中使用密件抄送发送电子邮件

ruby-on-rails - 如何测试应用程序是否容易受到 sprockets 漏洞的影响?

ruby-on-rails - 是否运行 rake Assets :precompile always return the same filenames?

ruby-on-rails - 在 Rails 中使用插入查询遍历大数据的最佳方法是什么

ruby - 如何从 Rails 中的 View 表单中获取模型中的参数值?

Redmine 插件中的 ActionMailer 错误

ruby-on-rails - 单引号字符串字符串插值