Korrespondenz zwischen DatenbankeinschrÀnkungen und Validierungen

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!

Source: https://habr.com/ru/post/de431294/


All Articles