مرحبًا،
أود تقديم تقرير حول بعض القيود/التحققات الموجودة في النماذج ولكنها مفقودة في قاعدة البيانات.
متطلبات عدم السماح بالقيمة الفارغة المفقودة
تفاصيل المنشور (PostDetail) - المفتاح (key)، القيمة (value) مطلوب وجودها في النموذج، لكنها قابلة للقيمة الفارغة (nullable) في قاعدة البيانات.
-
مطلوب في النموذج (
app/models/post_detail.rb):validates_presence_of :key, :value…لكنها قابلة للقيمة الفارغة في قاعدة البيانات
discourse_development=# \d post_details Table "public.post_details" Column | Type | Collation | Nullable | Default ------------+-----------------------------+-----------+----------+------------------------------------------ ... key | character varying | | | value | character varying | | |إذا أضفنا قيد NOT NULL إلى قاعدة البيانات، فقد لا يزال من الممكن تمرير سلسلة فارغة، لكنني أعتقد أن وجود قيد NOT NULL سيجعل النظام أكثر أمانًا على الأقل.
قيود التفرّد المفقودة
-
مجموعة الوسوم (TagGroup) - الاسم (name). فريد في النموذج (
app/models/tag_group.rb)validates_uniqueness_of :name, case_sensitive: falseلكن الفهرس الفريد مفقود من قاعدة البيانات
discourse_development=# \d tag_groups ... Indexes: "tag_groups_pkey" PRIMARY KEY, btree (id) -
وبالمثل، كلمة مراقَبة (WatchedWord) - الكلمة (word). (
app/models/watched_word.rb)validates :word, presence: true, uniqueness: true, length: { maximum: 50 }تحتوي قاعدة البيانات على فهرس فريد على
(action, word)ولكن ليس على(word)وحده:discourse_development=# \d watched_words ... Indexes: "watched_words_pkey" PRIMARY KEY, btree (id) "index_watched_words_on_action_and_word" UNIQUE, btree (action, word) -
أخيرًا، نوع حدث الويب هوك (WebHookEventType) - الاسم (name). (
app/models/web_hook_event_type.rb):validates :name, presence: true, uniqueness: trueقيد التفرّد مفقود في قاعدة البيانات:
discourse_development=# \d web_hook_event_types ... Indexes: "web_hook_event_types_pkey" PRIMARY KEY, btree (id)
ربما يتمكن شخص ما من تأكيد ما إذا كانت هذه تبدو معقولة. فمن الممكن أن تساعد في منع حدوث خطأ قبل وقوعه. أيضًا، إذا كان الأمر كذلك، فسيبدو الإصلاح بسيطًا جدًا، وسأكون سعيدًا بإنشاء طلب دمج (pull request) إذا كان ذلك مفيدًا.
شكرًا لك.