2017-09-07 2 views
0

J'ai quelques difficultés à vérifier si mon utilisateur a créé un restaurant 48 heures après signed_up (l'objectif est d'envoyer un rappel par courriel).Vérifiez si l'utilisateur a un restaurant 48 heures après l'inscription

J'ai essayé différents choses et maintenant je suis avec dans mon

UTILISATEUR MODÈLE: 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 

Je l'ai essayé comme ça parce que je l'ai vu avec sidekiq i didn Pas besoin de créer du travail pour livrer plus de mes UserMailers .. :)

Des indices? Si ce n'est pas clair, dites-moi!

Nous vous remercions à l'avance

Répondre

1

after_create appellera cette méthode immédiatement créer après, si created_at ne sera jamais égal (BTW, en général, vous voulez dire> =, juste en millisecondes de cas ont passé) au created_at des utilisateurs.

Instad Je vous suggère d'explorer ActiveJob. Créer un emploi qui fait cette même question, à l'exception est couru 48 heures plus tard:

after_create :reminder 

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

Dans ce travail:

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

Si vous utilisez déjà Sidekiq, vous pouvez le configurer comme backend pour ActiveJob , ou utilisez ses propres travailleurs. La syntaxe peut changer, mais le même concept est valable.

+0

Merci pour votre réponse rapide, je vais essayer maintenant :) –

+0

Si je comprends bien, le courrier est envoyé et attend 48 heures. Et le travail vérifie chacun (15 secondes pour sidekiq par défaut) si l'utilisateur a créé un restaurant? –

+0

J'ai mis à jour l'exemple de code pour être plus clair: Le 'CreateRestaurantReminderJob' est mis en file d'attente immédiatement après la création de l'utilisateur, et il est configuré pour s'exécuter seulement après 48 heures (aucun email envoyé jusqu'à présent). Lorsque le travailleur s'exécute, il demande: "Cet utilisateur a-t-il déjà créé un restaurant?", Sinon, il envoie l'email là. – Leito