نصيحة rubocop جيدة، لكنني لا أعتقد أنها سبب هذا الخطأ. (يشير “الخطر” الذي تذكره إلى الأقفال على الجداول ذات حركة المرور العالية والتي من شأنها أن تؤثر على حركة الإنتاج. لذا فهي ليست شيئًا قد يسبب أخطاء في بيئة الاختبار)
يمكنك على الأرجح إعادة إنتاج نفس الخطأ محليًا عن طريق القيام بـ RAILS_ENV=test bin/rake db:drop db:create db:migrate (أي ترحيل قاعدة بيانات تمامًا من الصفر، مع تمكين المكون الإضافي للمواقع)
أشك في أن المشكلة هي أنك تستدعي مهام Rake داخل ترحيل. في النواة، نتجنب بشكل عام تشغيل أي نوع من أكواد التطبيق في الترحيلات بسبب الآثار الجانبية الغريبة التي يمكن أن تحدث. من الأفضل الالتزام بـ SQL الخام.
في هذه الحالة، أفترض أن ذاكرة التخزين المؤقت لمخطط ActiveRecord يتم ملؤها في وقت مبكر من الترحيلات (عندما لا يزال topics.off_topic_count موجودًا). بعد ذلك، عندما تعمل مهمة Rake الخاصة بك، فإنها تعمل بذاكرة تخزين مؤقت قديمة للمخطط، لذا تحاول ActiveRecord تحميل أعمدة لم تعد موجودة.
يمكنك على الأرجح التخفيف من ذلك عن طريق إضافة ActiveRecord::Base.clear_cache! قبل استدعاء مهام Rake… ولكن لا تعتبر ذلك توصية
. أفضل شيء هو تجنب استدعاء مهام Rake تمامًا. إذا كنت بحاجة إلى معالجة شيء ما في قاعدة البيانات، فاستخدم SQL خام داخل الترحيل.