Where do I put helper methods for ActionMailer views?

An already answered question, but I didn't get where/what-file to modify from the other SO responses. Here is how I did it:

At the bottom of app/config/initializers/devise.rb you can add this:

Devise::Mailer.class_eval do
  helper :application # includes "ApplicationHelper"
end

This example will include the methods in /app/helpers/application_helper.rb. You could include another helper-file instead - if, for example, the method is only for the mailer or used for one other controller only. The def I needed is used all over, so I put in in that file so all views could access it.


It would be worth looking at the to_sentence extension method for arrays that rails provides.


In my case, for Rails 5.1, I had to use both include and helper methods, like this:

include ApplicationHelper
helper :application

And then just proceed to use the method normally.

class MyMailer < ActionMailer::Base
  include ApplicationHelper
  helper :application

  def my_mailer_method
    my_helper_method_declared_in_application_helper
    ..
  end
end

Use the helper method in your mailer to define the helper class to use

# mailer_helper.rb
module MailerHelper
  def and_join(arr)
    # whatever …
  end
end

# my_mailer.rb
class MyMailer < ActionMailer::Base
  helper MailerHelper
  …
end

then you can use the methods in views as well.