Как добавить файл before_filter в UserMailer, который проверяет, нормально ли отправлять почту пользователю?
Есть ли глобальный способ написать файл 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
Возможные? Кто-нибудь сделал что-то подобное? Благодаря
Ответы
Ответ 1
У 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
Ответ 2
Я не делал этого, но я делал подобные вещи с помощью перехватчика электронной почты.
class MailInterceptor
def self.delivering_email(message)
if User.where( :email => message.to ).first.mail_me != true
message.perform_deliveries = false
end
end
end
У вас не будет доступа current_user, поэтому вы найдете пользователя по электронной почте, который уже должен быть в почтовом объекте как поле "Кому".
Там есть хороший Railscast, который настраивает почтовые перехватчики.
http://railscasts.com/episodes/206-action-mailer-in-rails-3?view=asciicast
Ответ 3
Возможно, зайдите https://github.com/kelyar/mailer_callbacks. Похоже, он будет делать то, что вы хотите.