Ruby on Rails
Transakcje ActiveRecord
Szukaj…
Wprowadzenie
Transakcje ActiveRecord są blokami ochronnymi, w których sekwencja aktywnych zapytań dotyczących rekordów jest trwała tylko wtedy, gdy wszystkie mogą odnieść sukces jako jedna akcja atomowa.
Rozpoczęcie pracy z aktywnymi transakcjami rekordowymi
Transakcje rekordów aktywnych można zastosować do klas modeli, a także instancji modelu, obiekty w bloku transakcji nie muszą być wszystkie instancjami tej samej klasy. Wynika to z faktu, że transakcje dotyczą połączenia dla bazy danych, a nie dla modelu. Na przykład:
User.transaction do
account.save!
profile.save!
print "All saves success, returning 1"
return 1
end
rescue_from ActiveRecord::RecordInvalid do |exception|
print "Exception thrown, transaction rolledback"
render_error "failure", exception.record.errors.full_messages.to_sentence
end
Użycie opcji Zapisz z hukiem gwarantuje, że transakcja zostanie automatycznie wycofana, gdy wyjątek zostanie zgłoszony, a po wycofaniu kontrola przejdzie do bloku ratunkowego wyjątku. Pamiętaj, aby uratować wyjątki zgłoszone z rzutu obronnego! w bloku transakcji.
Jeśli nie chcesz używać save !, możesz ręcznie podnieść raise ActiveRecord::Rollback
gdy zapis nie powiedzie się. Nie musisz obsługiwać tego wyjątku. Następnie wycofuje transakcję i przejmuje kontrolę do następnej instrukcji po bloku transakcji.
User.transaction do
if account.save && profile.save
print "All saves success, returning 1"
return 1
else
raise ActiveRecord::Rollback
end
end
print "Transaction Rolled Back"