Это будет что-то вроде следующего (не может быть определено без кода):
daily.rake
- ваша задача рейка была вызвана через cron
daily
namespace :daily do
desc "run daily tasks"
task :daily, :needs => :environment do
Account.each do |account|
account.users.each do |user|
UserMailer.deliver_daily_email(user)
end
end
end
user_mailer.rb
- Ваше письмо отправит действительное письмо
UserMailer < ActiveMailer::Base
def daily_email(user)
@recipients = "#{user.email}"
@from = "my@email"
headers "Reply-to" => "my@email"
@subject = "Your daily message"
@sent_on = Time.now
@body[:user] = user
end
end
daily_email.text.html.erb
- Фактическое содержание письма
<h2>Hi <%=h @user.name %></h2>
You like:
<ul>
<% @user.account.ideas.each do |idea| %>
<li><%=h idea.title %></li>
<% end %>
</ul>
-sincerely, the mailer server
Надеюсь, это даст вам хорошее представление о том, как это все должнобыть настроенным.Дайте мне знать, если что-то здесь сбивает с толку.Наслаждайтесь!
[Редактировать]
Как отметил Джош Пинтер ниже, вы, вероятно, захотите отправлять пользователю только новые идеи (созданные за последние 24 часа)или отслеживать, какие идеи видел пользователь и исключать их из электронной почты).Вы можете сделать это с помощью области в idea.rb
scope :recent, -> { where("created_at < ", 1.day.ago) }
или
# Note, you'll need to create and maintain a `viewed_at` column
scope :unviewed, -> { where(viewed_at: nil) }
Затем для каждого пользователя вы можете установить
ideas = user.ideas.recent.any?
и толькоотправьте электронное письмо, если есть идеи recent
или unviewed
.После того, как вы отправите электронное письмо, вы можете настроить просмотр, набрав ideas.update_all(viewed_at: Time.now)
.