2012-09-03 22 views
19

Basit soru. Kayıt işleminin kaydedilmesinden sonra post processing yapmak istediğim bir ActiveRecord modelim var. Yani modelde, bir işi Resque kuyruğuma yapıştıran bir queue_for_processing yöntemim var. Kaydım başarıyla sürdürüldükten sonra bu yürütmeyi yapmak için modelimde aşağıdakileri yazdım:Raylar: After_create durduruyorken istisna kaydet

after_create :queue_for_processing 

Oldukça basit. Herşeyin beklendiği gibi çalıştığını düşünmüştüm. Dün gece redis sunucum düştü ve işler ters gitti. Beklentilerim, kaydın hala saklanacağıydı ve işi daha sonra elle işleyebilirim. Ancak, queue_for_processing yöntemi bir istisna (beklenen davranış) atar ve kaydetmeyi kaydetmeyi durdurur.

After_create'in nasıl çalıştığını yanlış anladım mı? Yoksa benim anlayışım doğru ve korkak bir şey mi oluyor?

Teşekkürler.

cevap

34

Evet, geri aramaların hepsi bir işlemde tamamlandı. after_save içinde

  • dönüş before_save sahte ya da benzer geri aramalar
  • durum before_save veya benzeri geri aramalar
  • durum ya da benzer geri aramalar (after_create)
:

Temel olarak, aşağıdaki bir geri alma neden olur

Aşağıdakiler bir geri alma neden OLMAYAN:

Eğer bir geri alma neden istisna istemiyorsanız after_save veya benzeri geri aramaları gelen sahte
  • dönüş
  • istisna içinde after_commit

, kullanmak after_commit

+1

Harika, hızlı yanıt için teşekkürler. Bu da yardımcı oldu: http://rails-bestpractices.com/posts/695-use-after_commit –

+0

Ayrıca, after_commit'e katıldığınız için teşekkürler. Rails3'te tanıtıldığını görüyorum, ama notu kaçırmış olmalıyım. Yeni şeyler öğrenmeyi seviyorum :-) –

+0

Harika bir açıklama! Dürüstlük için +1. –