2013-03-14 2 views
0

Я смущен тем, какое конструктивное решение мне нужно сделать.Решение о разработке с использованием ActionMailer

Я знаю, что фундаментальное использование случай ActionMailer в том, что вы бы:

  • Создать класс наследует от ActionMaier
  • определить метод в там о чем послать и кому отправить его и с кем , и т. д.

Здесь я отклоняюсь и теряю понимание.

Как правило, вы бы вызвать метод на вашей почтовой модели в контроллере определенного действия, для экс-

def create 
@user = User.new(params[:user]) 
if @user.save 
    MyMailerClass.send_signup_email(@user).deliver 
    redirect_to @user 
else 
    render :new 
end 
end 

Что делать, если, например, я хочу, чтобы отправить электронное письмо на основе, если пользователь hasn» t в течение X дней. Я уверен, что есть несколько способов сделать это, но любопытно, как лучше всего использовать рельсы, так как я не уверен, где искать. This is close Я не хочу, чтобы он отправлялся в зависимости от времени суток, когда выполняется определенное условие.

Спасибо.

ответ

2

Похоже, вы хотите, чтобы задание cron периодически выполнялось, чтобы проверить определенные условия и на основании этих условий отправить электронное письмо. Это не слишком далеко от того, что вы делаете со стандартной почтовой программой, за исключением того, что вместо отправки его с контроллера вы отправляете его из отдельного сценария. Я обычно пишу задачу грабли для этого:

task :send_reminder_emails => :environment do 
    users = User.where('last_login <= ?', 10.days.ago) 
    users.each do |user| 
    MyMailerClass.reminder(user).deliver 
    end 
end 

И вы бы запустить его с rake send_reminder_emails. Есть множество примеров, доступных для настройки задания cron, если вы не знакомы с тем, как это сделать.

+0

Я считаю, что это именно то, что ценит внимание. –

+0

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

Смежные вопросы