[JAVA] Transaction déclarative dans Rails #ginzarb

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

Qu'est-ce qu'une transaction déclarative?

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
}

Comment utiliser

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

Transaction déclarative dans Rails #ginzarb
Group_by dans Rails
Association de modèles dans Rails
Ajout de colonnes dans les rails
Désactiver les turbolinks dans les rails
^, $ dans l'expression régulière Rails
Utiliser des images avec des rails
Comprendre la migration dans les rails
Diviser routes.rb dans Rails6
Markdown implémenté dans Rails
[Rails] Obtenir UserAgent sur le contrôleur
Japaneseize en utilisant i18n avec Rails
Implémenter l'authentification LTI dans Rails
Gemme souvent utilisée dans les rails
Afficher le calendrier mensuel dans Rails
Utilisez plusieurs cases à cocher dans Rails6!
Rails: capturez les expressions régulières dans les e-mails!
[Rails] Paramètre de délai d'expiration de session dans l'appareil
Ajoutez une fonction de recherche dans Rails.
Activer jQuery et Bootstrap dans Rails 6 (Rails 6)
[rails] Implémentation de l'écran de connexion dans la devise
[Rails] Erreur de validation inattendue dans l'appareil
À propos du symbole <%%> dans Rails erb
[Rails] Utiliser des cookies en mode API
Implémenter une fonction de connexion simple dans Rails
Créer une nouvelle application avec Rails
Ruby on Rails compatible japonais-anglais i18n
[Solution] Webpacker :: Manifest :: MissingEntryError dans les rails
Implémenter un formulaire de contact dans Rails
Supprimez les "actifs" et les "turbolinks" dans "Rails6".
Fonction CRUD et MVC dans Rails
Comment installer jQuery dans Rails 6
Ajout de la première fonction de pagination dans les rails
Les données ne sont pas enregistrées dans Rails.
[Rails 6] Personnaliser Bootstrap dans l'environnement Rails + Bootstrap 5.0.0-alpha
Implémenter la fonction de téléchargement CSV dans Rails
Méthodes Ruby souvent utilisées dans Rails
Comment installer Swiper in Rails