بعد مرور بعض الوقت من بداية تطوير مشروعك ، قد تلاحظ وجود تضارب بين القيود في قاعدة البيانات وعمليات التحقق في التطبيق. في هذه المقالة ، أشرح كيف ستساعدك gem
database_consistency في تنظيم قاعدة البيانات الخاصة بك.
نناقش حالتين ممكنتين. رمز عينة مكتوب لـ
ActiveRecord .
الوضع الأول
افترض أن لديك جدولاً مقدمًا على النحو التالي:
create_table :users do |t| t.string :name end
وأعلن فئة:
class User < ApplicationRecord validates :name, presence: true end
في هذه الحالة ، يمكن تجاهل التحقق باستخدام طرق مثل:
save(validate: false)
، ونتيجة لذلك ، سيتم تخزين قيمة
NULL في قاعدة البيانات. في
معظم الحالات ، لن ترغب في حدوث ذلك (لأنك قمت بتثبيت التحقق). وبالتالي ، سيكون من الأصح وجود قيود غير صفرية في قاعدة البيانات.
create_table :users do |t| t.string :name, null: false end
الوضع الثاني (عكس)
افترض أن لديك جدولاً مقدمًا على النحو التالي:
create_table :users do |t| t.string :name, null: false end
وأعلن فئة:
class User < ApplicationRecord validates :name end
في هذه الحالة ،
valid?
سيعود
true
للسجلات التي لا يمكن حفظها. علاوة على ذلك ، ستنفذ محاولة حفظ مثل هذا السجل في قاعدة البيانات من استعلام واحد إلى عدة استعلامات SQL وستؤدي في النهاية إلى ظهور خطأ ، مع التراجع عن المعاملة بأكملها. كل هذه التلاعبات غير فعالة ويمكن حلها بسهولة عن طريق إضافة
presence: true
التحقق
presence: true
. في معظم الحالات ، يجب عليك إضافة هذا التحقق من الصحة.
السؤال المطروح أمامي: كيف أجد كل هذه الحالات تلقائيًا؟
أقدم لكم قاعدتي. في الوقت الحالي ، يكتشف معظم الحالات. كمكافأة صغيرة ، سيخبرك أيضًا بحالة يمكن فيها حفظ سجل بقيمة
فارغة في عمود به قيود غير صفرية.
تبقى بعض الأسئلة مفتوحة:
- ما الفرص الأخرى للتنفيذ؟
- هل هناك حاجة لدعم ORMs أخرى مثل تتمة ؟
جربها بنفسك وشارك ملاحظاتك. سأكون ممتنا لأي مساهمة!