Zoeken…


Invoering

ActiveRecord-transacties zijn beschermende blokken waarbij de reeks actieve recordquery's alleen permanent is als ze allemaal als één atomaire actie kunnen slagen.

Aan de slag met actieve recordtransacties

Actieve recordtransacties kunnen worden toegepast op modelklassen en modelinstanties, de objecten in het transactieblok hoeven niet allemaal instanties van dezelfde klasse te zijn. Dit komt omdat transacties per databaseverbinding zijn en niet per model. Bijvoorbeeld:

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

Het gebruik van opslaan met een knal zorgt ervoor dat de transactie automatisch wordt teruggedraaid wanneer de uitzondering wordt gegenereerd en na het terugdraaien gaat de controle naar het reddingsblok voor de uitzondering. Zorg ervoor dat je de uitzonderingen redt die uit de redding zijn gegooid! in transactieblok.

Als je geen save wilt gebruiken !, kun je raise ActiveRecord::Rollback handmatig verhogen als het opslaan mislukt. U hoeft deze uitzondering niet aan te pakken. Het zal dan de transactie terugdraaien en de besturing meenemen naar het volgende overzicht na transactieblok.

   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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow