Ruby on Rails
ActiveRecord-transaktioner
Sök…
Introduktion
ActiveRecord-transaktioner är skyddande block där sekvensen med aktiva postfrågor endast är permanent om de alla kan lyckas som en atomaktivitet.
Komma igång med aktiva posttransaktioner
Aktiva posttransaktioner kan tillämpas på modellklasser såväl som modellinstanser, objekten inom transaktionsblocket behöver inte alla vara instanser av samma klass. Detta beror på att transaktioner är per databasanslutning, inte per modell. Till exempel:
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
Genom att använda spara med en lugg säkerställs att transaktionen automatiskt rullas tillbaka när undantaget kastas och efter rollbacken går kontrollen till undsättningsblocket. Se till att du räddar undantagen som kastas från rädda! i transaktionsblock.
Om du inte vill använda spara! raise ActiveRecord::Rollback
du manuellt höja raise ActiveRecord::Rollback
när sparingen misslyckas. Du behöver inte hantera detta undantag. Den kommer sedan att återföra transaktionen och ta kontrollen till nästa uttalande efter transaktionsblocket.
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"