3

Ich benutze devise_invitable, um Benutzer zur App einladen, für die ich benutzerdefinierte Nachricht in der E-Mail hinzufügen möchte. also sieht mein Code so aus.attr_accessor nicht in Mailer bei der Verwendung von 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 %>  

Wenn ich nur mit liefere dann Nachricht auf Mailer angezeigt wird, aber wenn ich deliver_later attr_accessor in Null auf der Mailer Ansicht verwenden.

Antwort

2

attr_accessor funktioniert nicht, weil deliver_later serialisiert Ihr Benutzerobjekt zu GlobalID. Wenn der Übermittlungsjob ausgeführt wird, lädt der Jobprozess Ihren Benutzer erneut aus der Datenbank (die natürlich keine Instanzvariablen für das Objekt enthält). Sie müssen wahrscheinlich die Nachricht an den Job übergeben (vielleicht könnten Sie es schleichen in *args, (Hand

+0

Dank @cam, das wird helfen. – power

Verwandte Themen