Nach einiger Zeit ab dem Beginn der Entwicklung Ihres Projekts stellen Sie möglicherweise fest, dass Sie Inkonsistenzen zwischen den EinschrÀnkungen in der Datenbank und den Validierungen in der Anwendung haben. In diesem Artikel erklÀre ich, wie gem 
database_consistency Ihnen hilft, Ihre Datenbank aufzurÀumen.
Wir diskutieren zwei mögliche Situationen. Beispielcode fĂŒr 
ActiveRecord geschrieben .
Erste Situation
Angenommen, Sie haben eine Tabelle, die wie folgt dargestellt wird:
create_table :users do |t| t.string :name end 
und eine Klasse deklariert als:
 class User < ApplicationRecord validates :name, presence: true end 
In diesem Fall kann die Validierung mit folgenden Methoden ignoriert werden: 
save(validate: false) Infolgedessen wird ein 
NULL- Wert in der Datenbank gespeichert. In den 
meisten FÀllen möchten Sie dies nicht (da Sie die Validierung installiert haben). Daher wÀre es korrekter, eine EinschrÀnkung ungleich Null in der Datenbank zu haben.
 create_table :users do |t| t.string :name, null: false end 
Zweite Situation (umgekehrt)
Angenommen, Sie haben eine Tabelle, die wie folgt dargestellt wird:
 create_table :users do |t| t.string :name, null: false end 
und eine Klasse deklariert als:
 class User < ApplicationRecord validates :name end 
In diesem Fall 
valid? gibt 
true fĂŒr DatensĂ€tze zurĂŒck, die nicht gespeichert werden können. DarĂŒber hinaus fĂŒhrt ein Versuch, einen solchen Datensatz in der Datenbank zu speichern, von einer bis zu mehreren SQL-Abfragen aus und gibt letztendlich einen Fehler zurĂŒck, wĂ€hrend die gesamte Transaktion zurĂŒckgesetzt wird. Alle diese Manipulationen sind ineffizient und können leicht durch HinzufĂŒgen von 
presence: true gelöst werden 
presence: true Validierung. In den meisten FĂ€llen sollten Sie diese Validierung hinzufĂŒgen.
Vor mir stellte sich die Frage: Wie finde ich all diese FĂ€lle automatisch?
Ich prÀsentiere Ihnen meine gem 
database_consistency . Im Moment erkennt es die meisten FÀlle. Als kleinen Bonus teilt er Ihnen auch eine Situation mit, in der es möglich ist, einen Datensatz mit einem 
NULL- Wert in einer Spalte mit einer EinschrÀnkung ungleich Null zu speichern.
Einige Fragen bleiben offen:
Probieren Sie es aus und teilen Sie Ihr Feedback. FĂŒr jeden Beitrag wĂ€re ich dankbar!