Rails 5 - лучший способ предотвратить отправку писем отписавшимся пользователям - PullRequest
0 голосов
/ 04 мая 2020

Я использую Rails 5.

У меня есть модель Affiliate с логическим атрибутом email_notifications_on.

Я создаю довольно надежную систему электронной почты для филиалов и могу не выясните, где лучше всего проверить, есть ли у партнера уведомление по электронной почте, прежде чем доставить письмо.

Большинство моих электронных писем отправляются с заданий Resque BG, несколько других - с контроллеров.

Вот пример того, как я проверяю статус подписки на задании BG:

class NewAffiliateLinkEmailer

  @queue = :email_queue

  def self.perform(aff_id)

    affiliate = Affiliate.find(aff_id) 

    if affiliate.email_notifications_on?
      AffiliateMailer.send_links(affiliate).deliver_now
    end

  end
end

Кажется, что написание if affiliate.email_notifications_on? в 10+ областях - неправильный способ это, особенно если мне нужно другое условие, которое будет выполнено в будущем. Или это нормально?

Я думал, что, возможно, какой-то обратный вызов в AffiliteMailer сработает, но видел, как многие люди советуют не использовать бизнес-логи c в Mailer.

Любые мысли / советы будут оценены.

1 Ответ

0 голосов
/ 04 мая 2020

Если честно, я не думаю, что лучше, чем создать метод в Affiliate модели следующим образом:

def should_send_email?
  # all business logic come here
  # to start with you will just have following
  # email_notifications_on?
  # later you can add `&&` or any business logic for more conditions
end

Вы можете использовать этот метод вместо атрибута. Это более многоразовое и расширяемое. Вам все равно придется использовать метод при каждом вызове. Если вам нравятся одиночные лайнеры, вы можете использовать лямбду.

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