Hola,
Quería reportar algunas validaciones/restricciones que existen en los modelos pero que faltan en la base de datos.
Requisitos de no nulo faltantes
PostDetail - key, value son obligatorios en el modelo, pero son nullable en la base de datos.
-
Obligatorio en el modelo (
app/models/post_detail.rb):validates_presence_of :key, :value…Pero nullable en la base de datos
discourse_development=# \d post_details Table "public.post_details" Column | Type | Collation | Nullable | Default ------------+-----------------------------+-----------+----------+------------------------------------------ ... key | character varying | | | value | character varying | | |Si añadimos una restricción NOT NULL a la base de datos, aún es posible que pase una cadena vacía, pero creo que tener not null será al menos un poco más seguro.
Restricciones de unicidad faltantes
-
TagGroup - name. Único en el modelo (
app/models/tag_group.rb)validates_uniqueness_of :name, case_sensitive: falsePero falta el índice único en la base de datos
discourse_development=# \d tag_groups ... Indexes: "tag_groups_pkey" PRIMARY KEY, btree (id) -
De igual manera, WatchedWord - word. (
app/models/watched_word.rb)validates :word, presence: true, uniqueness: true, length: { maximum: 50 }La base de datos tiene un índice único en
(action, word)pero no en(word)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) -
Finalmente, WebHookEventType - name. (
app/models/web_hook_event_type.rb):validates :name, presence: true, uniqueness: trueFalta la restricción única en la base de datos:
discourse_development=# \d web_hook_event_types ... Indexes: "web_hook_event_types_pkey" PRIMARY KEY, btree (id)
Quizás alguien pueda confirmar si esto parece razonable. Es posible que esto ayude a prevenir un error antes de que ocurra. Además, de ser así, la solución parece bastante directa, y estaré encantado de crear una pull request si eso es de ayuda.
Gracias.