2011-12-21 31 views
0

私は自分のデータベースをループして、特定の期間(例えば5日前または3日前)に置かれたすべてのアイテムを見つけ、その都度自動的にメールを送信したい私はスクリプトを実行します。したがって、ユーザーが5日間アクティブ化されていない場合は、スクリプトを毎日実行し、ユーザー作成後の時間が5日か3日かどうかを確認してください。レールでタイムスタンプを使用して電子メールを送信する

Railsでこれを行うにはどうすればいいですか? cronの少し経由

デフsend_reminders

@users = User.where :activated => false 
@message= "Hi" 
@users.each do |n| 

    ActMailer.remind_users(n, current_user, @message).deliver 

end 

redirect_to current_user, :notice => 'Reminders were successfully sent' 

エンド

おかげ

+0

は、私がこれまで持っているものです。 'デフsend_reminders @users = User.where:activated => false @ message = "Hi" @ users.each do | n | ActMailer.remind_users エンド redirect_toのCURRENT_USER、.deliver(nは、CURRENT_USER、@message):予告=>どのように私は代わりのCronせずに手動でこれを行うことができます end' –

答えて

1

(ときwhenever gemをお勧めします。ここでは

は、私がこれまで持っているものです)、あなたは次のようなことをすることができますこの。いつでものためのschedule.rbファイル内

class User < ActiveRecord::Base 
    REMINDER_TIME_IN_DAYS = 5 

    scope :unactivated, where(:active => false) 
    scope :unreminded, where("reminded = ? AND created_at < ?", true, REMINDER_TIME_IN_DAYS.days.ago) 

    def self.send_reminders_to_unactivated_users 
    User.unactivated.unreminded.each(&:send_activation_reminder) 
    end 
end 

そして:あなたは、あなたのユーザークラスで何かなどを持っているかもしれません

ここ

every 1.day, :at => "12:00 am" do 
    User.send_reminders_to_unactivated_users 
end 
+0

'をアラームが正常に送信されましたか'?私はこの機能を2日ごとに定期的に実行します。私は、5日前に作成されたユーザーを返す関数を残しておき、まだ無効になっています。 –

+0

@ NosayrYassinはコードを慎重に読んでいます。必要なのはそこだけです。 –

+0

User.send_reminders_to_unactivated_usersを手動で呼び出すことができます。 –

関連する問題