Proste pytanie. Posiadam model ActiveRecord, który chcę wykonać przetwarzanie po AFTER rekord zostanie zapisany. Tak więc w modelu mam metodę queue_for_processing, która umieszcza zadanie w mojej kolejce Resque. Aby wykonać to po pomyślnym zachowaniu mojej płyty, napisałem w moim modelu:Szyny: Wyjątek w after_create stopping save
after_create :queue_for_processing
Całkiem proste. Myślałem, że wszystko działa zgodnie z oczekiwaniami, Z WYJĄTKIEM ostatniej nocy mój serwer Redisa przestał działać i wszystko poszło nie tak. Moje oczekiwania były takie, że zapis byłby nadal zapisany i mogłem przetworzyć pracę później ręcznie. Ale metoda queue_for_processing rzuca wyjątek (oczekiwane zachowanie) i zatrzymuje zapis przed zapisaniem.
Czy nie rozumiem, jak działa after_create? Czy moje zrozumienie jest poprawne i coś ciekawego się dzieje?
Dzięki.
Niesamowite, dziękuję za szybką odpowiedź. To było również pomocne: http://rails-bestpractices.com/posts/695-use-after_commit –
Dziękuję również za wprowadzenie mnie do after_commit. Widzę, że został wprowadzony w Rails3, ale musiałem przegapić notatkę. Lubię uczyć się nowych rzeczy :-) –
Świetne wyjaśnienie! +1 za zwięzłość. –