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"


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow