2009-05-06 5 views
0

Une partie d'une application immobilière que j'écris permettra à un utilisateur de s'abonner à un emplacement et si une nouvelle propriété devient disponible à cet endroit, l'utilisateur recevra un email les avisant de cela.Empêcher un démon de notification Ruby on Rails d'envoyer les mêmes informations plus d'une fois

Je prévois d'exécuter un processus d'arrière-plan une fois toutes les quelques heures pour gérer la correspondance. À l'heure actuelle, j'ai un modèle appelé emplacement et le plan est d'ajouter un autre modèle appelé notification. Le modèle d'emplacement a une latitude et une longitude, de même que le modèle de notification.

Quelque chose comme:

create_table "locations", :force => true do |t| 
    t.decimal "lat",   :precision => 15, :scale => 10 
    t.decimal "lng",   :precision => 15, :scale => 10 
end 

create_table "notifications", :force => true do |t| 
    t.decimal "lat",   :precision => 15, :scale => 10 
    t.decimal "lng",   :precision => 15, :scale => 10 
    t.string "user_name" 
    t.string "user_email" 
end 

La chose évidente à faire est la boucle dans la liste des emplacements et si l'on correspond à celui dans une notification puis envoyer un mail à l'user_email défini dans le modèle de notification. Ce que j'essaye d'éviter est d'envoyer le même email au sujet d'un emplacement au même utilisateur plus d'une fois. Avec quoi le processus fonctionne toutes les quelques heures. J'ai pensé à ajouter un autre champ au modèle de notification appelé "has_been_mailed" qui serait défini sur true une fois qu'un mail est envoyé mais cela signifie que les futures mises à jour d'autres emplacements ne seront pas ajoutées.

Quelqu'un at-il des suggestions quant à la meilleure façon de mettre en œuvre cela?

+0

Maintenant, il me semble que vous approchez de tout cela du mauvais angle, mais il est difficile de le dire sans plus de détails. – kch

Répondre

0

Sans trop changer votre modèle, vous devriez avoir les champs d'horodatage created_at et updated_at dans les deux tableaux. Avec cela, vous pouvez interroger uniquement les emplacements et les notifications qui ont été mis à jour depuis la dernière fois que vous avez exécuté votre script de publipostage.

+0

J'ai complètement oublié que j'avais des champs created_at et updated_at. Parfait. Merci. – KJF