Je voudrais des conseils sur la façon dont je devrais synchroniser une liste d'adresses e-mail sur les utilisateurs 11k par rapport à un programme de liste de diffusion externe, dans ce cas Mailchimp.Quelle est la manière la plus efficace de synchroniser une base de données utilisateur avec un service de liste de diffusion externe?
Normalement, la façon dont je ferais cela est simplement d'avoir un callback: after_save, pour envoyer une seule mise à jour à l'API externe.
Mais déjà chaque heure, une tâche rake est exécutée pour mettre à jour une propriété sur chaque utilisateur dans la base de données. Si je le faisais simplement, toutes les heures, l'API mailchimp pauvre serait frappée 11 000 fois.
Quel est le moyen le plus efficace et le plus simple de le faire, de vérifier seulement si un seul attribut que vous regardez a changé par rapport à ce qu'il était avant la sauvegarde?
S'il y a une variable qui persiste tout au long du cycle de vie de la transaction, je ferais simplement quelque chose comme ceci, où je vérifie si la valeur a changé, et si elle est différente, exécute un autre code.
class User
:before_save :store_old_email
:after_save :sync_with_chimp
def store_old_email
$ugly_of_global_variable_to_store_email = user.email
end
:sync_with_chimp
if $ugly_of_global_variable_to_store_email != user.email
//update_mail_chimp_api
end
end
end
J'ai vérifié les rails api ici, et je suis encore un peu clair sur la façon dont je devrais faire cela.
Voulez-vous utiliser la classe dirty? ici pour faire cela?
C'est une approche intelligente! ce n'est pas celui que j'ai utilisé, car ce n'était pas la meilleure solution pour la logique sur le serveur, mais cela vaut la peine de se souvenir - merci pour le lien. –