Подтвердить что ты не робот

Как добавить файл 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

Возможные? Кто-нибудь сделал что-то подобное? Благодаря

4b9b3361

Ответ 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