كيف تقوم بالترقية ينتمي إلى العمل بسرعة مرتين (database_validations gem)

في هذه المقالة ، db_belongs_to لماذا تحتاج إلى استخدام db_belongs_to من db_belongs_to database_validations بدلاً من كلمة "ينتمي إلى المعتاد".


أنا متأكد من أن belongs_to على دراية belongs_to ORM ActiveRecord . ولكن هل تعلم أن تهيئة اتصال باستخدام belongs_to النموذج الخاص بك يضيف أيضًا التحقق من الصحة إلى وجود اتصال. وذلك لأن belongs_to الخيار optional: false افتراضيًا.


وبالتالي ، في كل مرة تقوم فيها بحفظ كائن جديد أو تحديث كائن موجود ، تقوم بتنفيذ استعلام SQL SELECT إضافي لكل من روابطك.


مثال


 class User < ActiveRecord::Base belongs_to :company belongs_to :country end user = User.first user.update(some_field: 'something') #        SELECT,  ,   `company`  `country`  

يجب أن تدرك أيضًا أن هذا النهج لا يضمن تكامل قاعدة البيانات ، كما هو يمكن حذف الروابط لاحقًا (في الطلبات اللاحقة أو المتوازية) دون أي مشاكل.


 user.update(...) user.company.destroy! =>     ,  ,          ,       (     ) 

لحل هذه المشكلة ، يمكنك إضافة قيد المفتاح الخارجي المطابق إلى قاعدة البيانات الخاصة بك. بوجود هذا القيد ، ستكون دائمًا متأكدًا من وجود هذا الاتصال.


ماذا عن الأداء؟ لماذا نحتاج إلى تقديم استعلامات SELECT إلى قاعدة البيانات إذا كنا متأكدين بالفعل من أن تكامل البيانات سيتم الحفاظ عليه (باستخدام قيد المفتاح الخارجي)؟


الجواب بسيط - لا حاجة. ولكن لجعل هذا ممكنًا ، نحتاج إلى حل مشكلة معالجة استثناء ActiveRecord::InvalidForeignKey ، الذي نحصل عليه عندما نحاول حفظ الاتصال غير الموجود في قاعدة البيانات. يعد هذا ضروريًا حتى يكون لديك نفس السلوك كما هو الحال بالنسبة لـ belongs_to ، بحيث تتضمن الأخطاء نفس الأخطاء.


لكي لا تكتب كل المعالجة بنفسك ، ستصبح جوهرة database_validations مفيدة. تضمنت هذه الأحجار الكريمة بالفعل validates_db_uniqueness_of ، والذي db_belongs_to على المحور ) وأصبح لديه الآن db_belongs_to ، وهو سهل التنفيذ للغاية في مشروعك. db_belongs_to يحسن الأداء ويضمن تكامل البيانات.


الطريقة تفعل بعض الأشياء بالنسبة لك:


  • بالتحقق من وجود قيد المفتاح الخارجي الصحيح في قاعدة البيانات أثناء بدء تشغيل التطبيق ؛
  • يوزع استثناءات قاعدة البيانات ويوفر الأخطاء المناسبة لأخطاء الكائن الخاص بك ؛
  • يلغي الحاجة إلى تنفيذ استعلامات SQL إضافية إلى قاعدة البيانات ؛

أنصحك باستخدام قاعدة البيانات في مشاريعك. لقد تم اختبار هذه الأحجار الكريمة بالفعل في بيئة الإنتاج وقد أثبتت أنها جيدة جدًا. على الرغم من سهولة التنفيذ ، إلا أنه يمكنه تحسين أداء مشروعك بشكل كبير كلما كنت تستخدمه ، كلما قمت بحفظه ، تحقق من معايير المجموعة للحصول على التفاصيل.


أي ردود فعل هو موضع ترحيب! نحن ممتنون لأي مساهمة في المشروع!

Source: https://habr.com/ru/post/ar431734/


All Articles