Почтовик, ИМХО, является неподходящим местом для этой логики.Почтовик не должен делать ничего, кроме форматирования и отправки сообщений.Логика для принятия решения о том, отправлять или нет, должна находиться в вызывающем блоке кода.Это не правильный путь, но что-то такое простое, как:
UserMailer.newsletter(user).deliver if user.subscribed?
В качестве альтернативы, как вы упомянули, вам не нужно перебирать всех пользователей, только подписанных.То есть с scope
в модели User
, называемой subscribed
:
User.subscribed.each do |user|
UserMailer.newsletter(user).deliver
end
Таким образом, вам не нужно тестировать для каждого пользователя;включены только подписанные пользователи, и логика находится в вызывающем блоке, а не в почтовой программе.