есть ли глобальный способ написать before_filter для моего пользовательского почтовика, который проверяет, отключена ли у пользователя электронная почта? Сейчас каждый мой мейлер проверяет настройки пользователя, это очень избыточно. Я хотел бы упростить эту работу, имея before_filter, который работает для всех почтовых программ.
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
Возможно ли это? Кто-нибудь делал что-то подобное? Спасибо
Rails 4 уже имеет обратные вызовы before_filter и after_filter. Для пользователей Rails 3 добавить их на удивление просто: просто включите AbstractController :: Callbacks. Это имитирует изменение в Rails 4 , которое, кроме комментариев и тестов, просто включало обратные вызовы.
class MyMailer < ActionMailer::Base
include AbstractController::Callbacks
after_filter :check_email
def some_mail_action(user)
@user = user
...
end
private
def check_email
if @user.email.nil?
mail.perform_deliveries = false
end
true
end
end
Может быть, проверить https://github.com/kelyar/mailer_callbacks . Похоже, он будет делать то, что вы хотите.