Я бы, наверное, сделал это так:
Чтобы определить, отправила ли система электронное письмо пользователю, вы должны добавить атрибут, скажем, «sent_email», который в основном просто логический.
Я бы создал задание cron для задачи rake, которая проверяет всех пользователей с sent_email = 0. Затем я переберу каждый массив и отправлю электронное письмо и установлю sent_email = 1. Задание cron можно запускать ежедневно, в зависимости от ваших предпочтений. Вы можете использовать всякий раз, когда gem для настройки задания cron.
schedule.rb (всякий раз, когда материал)
job_type :run_script, "RAILS_ENV=:environment ruby :path/script/:task"
every 1.day do
run_script('send_email.rb')
end
сценарий / send_email.rb
#!/usr/bin/env ruby
puts "Loading rails environment..."
require(File.dirname(__FILE__) + "/../config/environment") unless defined?(Rails)
class SendEmail
def send_email
users = User.send_email_to
users.each do |user|
OneTimeMailer.deliver_one_time_email(user)
end
end
end
отправители / one_time_mailer.rb
class OneTimeMailer < ActionMailer::Base
def one_time_email(user)
recipients user.email
from 'your system'
subject 'hello world'
body 'this is a one time email. thank you'
end
end
Надеюсь, это поможет.