Ciao,
Volevo segnalare alcune convalidie vincoli presenti nei modelli ma mancanti nel database.
Vincoli NOT NULL mancanti
PostDetail - key, value sono obbligatori nel modello ma sono nullable nel database.
-
Obbligatori nel modello (
app/models/post_detail.rb):validates_presence_of :key, :value…Ma nullable nel database
discourse_development=# \d post_details Table "public.post_details" Column | Type | Collation | Nullable | Default ------------+-----------------------------+-----------+----------+------------------------------------------ ... key | character varying | | | value | character varying | | |Se aggiungiamo un vincolo NOT NULL al database, è comunque possibile che venga accettata una stringa vuota, ma credo che avere NOT NULL renda almeno un po’ più sicuro il sistema.
Vincoli di unicità mancanti
-
TagGroup - name. Unico nel modello (
app/models/tag_group.rb)validates_uniqueness_of :name, case_sensitive: falseMa manca un indice unico nel database
discourse_development=# \d tag_groups ... Indexes: "tag_groups_pkey" PRIMARY KEY, btree (id) -
Allo stesso modo, WatchedWord - word. (
app/models/watched_word.rb)validates :word, presence: true, uniqueness: true, length: { maximum: 50 }Il database ha un indice unico su
(action, word)ma non su(word)da solo:discourse_development=# \d watched_words ... Indexes: "watched_words_pkey" PRIMARY KEY, btree (id) "index_watched_words_on_action_and_word" UNIQUE, btree (action, word) -
Infine, WebHookEventType - name. (
app/models/web_hook_event_type.rb):validates :name, presence: true, uniqueness: trueManca un vincolo di unicità nel database:
discourse_development=# \d web_hook_event_types ... Indexes: "web_hook_event_types_pkey" PRIMARY KEY, btree (id)
Forse qualcuno potrebbe confermare se queste osservazioni sembrano ragionevoli. Potrebbero aiutare a prevenire un bug prima che si verifichi. Inoltre, se è così, la correzione sembra abbastanza diretta, e sono felice di creare una pull request se può essere utile.
Grazie.