Ruby on Rails
ActiveRecord-transacties
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"