2017-09-07 10 views
0

私のユーザーがsigned_upの48時間後にレストランを作成したかどうかを確認するのに問題があります(目的は電子メールリマインダを送信することです)。サインアップ後にレストランが48時間あるかどうかをチェック

私は貴様の事を試してみましたが、今私は私の

USERモデルではこれでよ:User.rb

after_create :reminder 



def reminder 
    if Time.now.utc == self.created_at + 48.hours && self.restaurants.count == 0 
    UserMailer.theactionofthemail(self).deliver_later 
end 

私はsidekiqと私はdidnのことを見たので、私はこのようにそれを試してみました私のUserMailers deliver_laterにジョブを作成する必要があります.. :)

すべての手がかり? 明らかでない場合は教えてください!

は、作成直後にそのメソッドを呼び出しますので、created_atとは、ユーザーのcreated_atとする(ところで、通常、あなただけの場合はミリ秒に合格した、> =と言いたい)と等しくなることはありません。事前に

答えて

1

after_createをありがとう

Instad私はActiveJobを探検することをお勧めします。そのジョブで

after_create :reminder 

def reminder 
    CreateRestaurantReminderJob.set(wait: 48.hours).perform_later self 
end 

を::

def perform(user) 
    return unless user.restaurants.count.zero? 
    UserMailer.theactionofthemail(user).deliver_now 
end 

すでにSidekiqを使用している場合、あなたはActiveJobのためのバックエンドとして、それを構成することができ、48時間後に実行されることを除いて、この同じ質問をしてジョブを作成します、またはそれ自身の労働者を使用してください。構文は変わるかもしれませんが、同じ考え方があります。

+0

すぐにお返事ありがとうございます、私は今これを試してみます:) –

+0

私はよく分かっていれば、メールが送信され、48時間待っています。 ユーザーがレストランを作成した場合、ジョブはそれぞれチェックしています(デフォルトのsidekiqは15秒です)。 –

+0

私は、コード例をより明確に更新しました。ユーザーの作成直後に 'CreateRestaurantReminderJob'がエンキューされ、48時間経過してから実行されるように設定されています(電子メールはまだ送信されていません)。ワーカーが走ると、「このユーザーはまだレストランを作っていますか?」と尋ねます。そうでなければ、そこにメールを送ります。 – Leito

関連する問題