How do I add instance variables to Devise email templates?
Asked Answered
C

1

6

I am trying to edit the confirmation_instructions.html.erb file to address the new user by first name instead of email.

Current the beginning of the file reads...

Hi, <%= @email %>,

How do I add an instance variable @first_name to the controller/mailer?

I ran rails generate devise:controllers users, but I just don't see any .rb files where I could add instance variables to confirmation mailer (if there is one)

Thanks

Clip answered 30/12, 2014 at 0:59 Comment(0)
S
6

This is easy, you can just create a Mailer for this:

class ConfirmationsMailer < Devise::Mailer
  default from: '<[email protected]>'

  def confirmation_instructions(record, token, opts={})
   @token = token
   #you can add your instance variables here
   devise_mail(record, :confirmation_instructions, opts)
  end
end

And then just tell Devise to use this class:

config/initializers/devise.rb

Devise.setup do |config|
...
config.mailer = 'ConfirmationsMailer'
...
end

Restart your server, and you should be good to go!

Strawn answered 30/12, 2014 at 21:37 Comment(8)
Can you give me an example of how to get an attribute from the user model? For instance the following isnt working @first_name = current_user.first_nameClip
Instead of using current_user, you can just use the record argument from the method, so in your case @first_name = record.first_nameStrawn
i came here to say that I figured it out with @first_name = record.first_name and then saw your post. thanks for your helpClip
where would I find what is available in the opts={}Clip
You can find it in here github.com/plataformatec/devise/blob/… but is basically the headers for the email, for example subject, from, to, etcStrawn
thanks. I also noticed you can change the subject in the devise lcoal fileClip
You are welcome! If you found the answer useful show me some love by accept it :) thanksStrawn
I would but I do not have enough reputation points. can you upvote the question?Clip

© 2022 - 2024 — McMap. All rights reserved.