3

Я использую devise_invitable, чтобы приглашать пользователей в приложение, для чего я хочу добавить пользовательское сообщение по электронной почте. поэтому мой код выглядит так.attr_accessor недоступен в почтовом ящике при использовании deliver_later

#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_later attr_accessor в ноль на представлении почтовой программы.

ответ

2

attr_accessor не работает, потому что deliver_later сериализует объект User на GlobalID. Когда выполняется задание на доставку, процесс задания перезагрузит пользователя из базы данных (что, конечно же, не включает в себя какие-либо переменные экземпляра объекта). Вам, вероятно, нужно передать сообщение на задание (возможно, вы могли бы прокрасть его в *args, (рука

+0

благодарит @cam, что поможет. – power