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!