Как добавить before_filter в UserMailer, который проверяет, можно ли отправлять почту пользователю? - PullRequest
24 голосов
/ 21 декабря 2011

существует ли глобальный способ, которым я могу написать 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

Возможно?Кто-нибудь сделал что-то подобное?Спасибо

Ответы [ 3 ]

30 голосов
/ 10 сентября 2013

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
6 голосов
/ 22 декабря 2011

Я этого не делал, но я делал подобные вещи с перехватчиком электронной почты.

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, поэтому вы найдете пользователя по электронной почте, который уже должен быть в почтовом объекте как поле 'to'.

Есть хороший Railscast, описывающий настройку перехватчиков электронной почты. http://railscasts.com/episodes/206-action-mailer-in-rails-3?view=asciicast

0 голосов
/ 21 декабря 2011

Может быть, проверить https://github.com/kelyar/mailer_callbacks. Похоже, он будет делать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...