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