Hallo,
ich möchte einen Bericht über einige Validierungen/Einschränkungen erstellen, die in den Modellen vorhanden, aber in der Datenbank fehlen.
Fehlende NOT NULL-Anforderungen
PostDetail - key, value sind im Modell erforderlich, aber in der Datenbank nullable.
-
Erforderlich im Modell (
app/models/post_detail.rb):validates_presence_of :key, :value…Aber nullable in der Datenbank
discourse_development=# \d post_details Table "public.post_details" Column | Type | Collation | Nullable | Default ------------+-----------------------------+-----------+----------+------------------------------------------ ... key | character varying | | | value | character varying | | |Wenn wir eine NOT NULL-Einschränkung zur Datenbank hinzufügen, ist es immer noch möglich, dass eine leere Zeichenkette durchkommt. Aber ich denke, dass NOT NULL zumindest etwas sicherer wäre.
Fehlende Unique-Einschränkungen
-
TagGroup - name. Im Modell eindeutig (
app/models/tag_group.rb)validates_uniqueness_of :name, case_sensitive: falseAber der Unique-Index fehlt in der Datenbank
discourse_development=# \d tag_groups ... Indexes: "tag_groups_pkey" PRIMARY KEY, btree (id) -
Ebenso WatchedWord - word. (
app/models/watched_word.rb)validates :word, presence: true, uniqueness: true, length: { maximum: 50 }Die Datenbank hat einen Unique-Index auf
(action, word), aber nicht auf(word)allein:discourse_development=# \d watched_words ... Indexes: "watched_words_pkey" PRIMARY KEY, btree (id) "index_watched_words_on_action_and_word" UNIQUE, btree (action, word) -
Schließlich WebHookEventType - name. (
app/models/web_hook_event_type.rb):validates :name, presence: true, uniqueness: trueFehlende Unique-Einschränkung in der Datenbank:
discourse_development=# \d web_hook_event_types ... Indexes: "web_hook_event_types_pkey" PRIMARY KEY, btree (id)
Vielleicht kann jemand bestätigen, ob diese Vorschläge sinnvoll erscheinen. Es ist möglich, dass sie helfen, Bugs zu verhindern, bevor sie auftreten. Falls ja, scheint die Korrektur ziemlich unkompliziert zu sein, und ich würde gerne einen Pull Request erstellen, falls das hilfreich ist.
Vielen Dank.