is there a global way I can write a before_filter for my user mailer, that checks to see if the user has emails disabled? Right now every mailer I have checks the user's setting, this is very redundant. I would like to DRY this up by having a before_filter that works for all mailers.
class UserMailer < ActionMailer::Base
before_filter :check_if_we_can_mail_the_user
....
private
def check_if_we_can_mail_the_user
if current_user.mail_me == true
#continue
else
Do something to stop the controller from continuing to mail out
end
end
end
Possible? Has anyone done something like this? Thanks
I haven't done this, but I've done similar things with an email interceptor.
You won't have access current_user, so you find the user by email, which should already be in the mail object as the 'to' field.
There's a good Railscast covering setting up email interceptors. http://railscasts.com/episodes/206-action-mailer-in-rails-3?view=asciicast
Rails 4 already has before_filter and after_filter callbacks. For Rails 3 users, it's surprisingly simple to add them: just include AbstractController::Callbacks. This mimics the change to Rails 4 which apart from comments and tests, just included Callbacks.
Maybe check out https://github.com/kelyar/mailer_callbacks. It looks like it will do what you want.
I edited @naudster 's answer to get the information from message