2011-10-05 6 views
1

Je télécharge une image et un observateur est déclenché lorsqu'un nouvel enregistrement est créé. En observateur, je pousse l'image via l'API vers un autre service. Le problème est de le faire localement ou dans le test rspec, semble que l'enregistrement est enregistré dans la base de données avant que l'image est enregistrée sur le disque et que je reçois une erreur de fichier introuvable. Comment faire pour garder l'ordre correct?, l'enregistrement est enregistré avant un fichier enregistré sur le disque

Répondre

0

Je ne connais pas les internes de votre observateur et votre code. Une solution possible serait de changer l'observateur à déclencher sur l'événement after_create.

+0

mais il est après créer à l'instant – Artur79

2

Les observateurs sont déclenchés avant les rappels définis dans le modèle. Par conséquent, la méthode after_create de votre observateur est invoquée avant l'exécution de la méthode after_save de paperclip qui traite la pièce jointe.

Pensez à utiliser after_commit ou ar_after_transaction au lieu de after_save etc. Lors de la communication avec une API externe est ce que vous voulez de toute façon, car sinon les appels API ne peuvent être annulées si la transaction est annulée.

+0

eu ce problème; after_commit a travaillé pour moi. –

+0

Avoir le même problème, mais selon: https://github.com/rails/rails-observers > Cela signifie que les rappels dans un observateur seront toujours appelés après les callbacks définis dans le modèle lui-même. –

Questions connexes