Quand on parle de transactions déclaratives à Ginza Ruby Conference 01, @a_matsuda ne veut pas que Rails ait des transactions déclaratives? Je disais quelque chose comme ça, alors je l'ai fait rapidement avec gemme.
https://github.com/ttanimichi/transactional
Une transaction déclarative est une méthode de description déclarative du fait qu'une transaction est automatiquement exécutée lorsqu'une méthode est appelée. Spring Framework de Java est un cadre d'implémentation bien connu. Pour Spring Framework, vous pouvez utiliser des transactions déclaratives en annotant la méthode avec @ Transactional
.
@Transactional
public void create(int id) {
// do something
}
Ajoutez-le à votre Gemfile et effectuez une installation groupée.
gem 'transactional'
Tout ce que vous avez à faire maintenant est de spécifier dans transactionnel
l'action avec laquelle vous souhaitez effectuer une transaction dans Controller.
class YourController < ApplicationController
+ transactional :create, :update
+
def index
end
def create
Post.create!(name: 'john', age: 42)
Topic.create!(title: 'invalid title')
render plain: :created
end
def update
end
end
Prendra automatiquement une transaction lorsque l'action spécifiée est appelée.
Processing by YourController#create as HTML
(0.2ms) BEGIN
SQL (0.5ms) INSERT INTO "posts" ("name", "age", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["name", "john"], ["age", 42], ["created_at", "2017-08-06 08:23:13.980493"], ["updated_at", "2017-08-06 08:23:13.980493"]]
(0.2ms) ROLLBACK
Dans cet exemple, vous pouvez voir que les messages INSERT sont annulés lorsque le sujet crée! Lève une exception.
Recommended Posts