Search code examples
ruby-on-rails-4devisedevise-confirmable

How do I add instance variables to Devise email templates?


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


Solution

  • 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!