Ruby on Rails
Transactions ActiveRecord
Recherche…
Introduction
Les transactions ActiveRecord sont des blocs protecteurs où la séquence des requêtes d'enregistrement actives n'est permanente que si elles peuvent toutes réussir en une seule action atomique.
Premiers pas avec les transactions d'enregistrement actives
Les transactions d'enregistrement actives peuvent être appliquées aux classes de modèle ainsi qu'aux instances de modèle. Les objets du bloc de transaction ne doivent pas nécessairement tous être des instances de la même classe. Cela est dû au fait que les transactions sont par connexion à la base de données, et non par modèle. Par exemple:
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
L'utilisation de save with a bang garantit que la transaction sera automatiquement annulée lorsque l'exception est lancée et après la restauration, le contrôle passe au bloc de secours pour l'exception. Assurez-vous de sauver les exceptions lancées lors de la sauvegarde! dans le bloc de transaction.
Si vous ne voulez pas utiliser save !, vous pouvez manuellement relancer raise ActiveRecord::Rollback
lorsque la sauvegarde échoue. Vous n'avez pas besoin de gérer cette exception. Il annulera alors la transaction et amènera le contrôle à l'instruction suivante après le bloc de transaction.
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"