أنا أبني موقعًا لمجتمع عقارات الإيجار، وتتمحور وظيفته الأساسية حول المناقشات الخاصة بكل مدينة. ستكون هناك بيانات مستخدم تحدد المدن التي يمتلكون معرفة بها، وما هي علاقتهم بتلك المدن (مقيم حاليًا، مقيم سابقًا، إلخ)، كما أن المستخدمين سيشتركون في المدن التي يريدون الاستثمار فيها لكنهم ليسوا على دراية بها. ستكون جميع المدن فئات، مع وجود حقل مخصص لوضع بيانات الإحداثيات الجغرافية الخاصة بها حتى يتمكن المستخدمون من تصفح المدن عبر خريطة.
أما ما أتردد فيه هو كيفية هيكلة هذا من منظور كفاءة قاعدة البيانات. عندما تكون في صفحة مدينة، سأعرض تغذية تظهر “خبراء الأعضاء” لتلك المدينة. إذا اضطررت إلى استعلام جميع المستخدمين والانتقال عبر حقولهم المخصصة ومفتاح “المدن الخبيرة” في كل مرة أقوم فيها بتحميل صفحة فئة، فأشعر أن هذا سيكون بطيئًا للغاية، خاصة مع زيادة عدد المستخدمين والمدن.
لو كنت سأبني هذا في تطبيق Rails خاص بي، لكان هذا قد حُل بسهولة عبر بعض جداول الربط وعلاقات has_many_through للنماذج أو ما شابه. لكن ما أود معرفته هنا هو النهج الموصى به لإضافة (plugin) يحتاج إلى جدول ربط. يبدو أن إنشاء جداول وهجرات مخصصة غير مستحسن، وأنه من الأفضل عمومًا إما استخدام الحقول المخصصة أو PluginStore — لم أتمكن من العثور على أي توثيق حقيقي حول PluginStore، لكنني أعمل حاليًا على البحث فيه.
فكرت فقط أنه من الحكمة أن أسأل عن النهج “الموصى به رسميًا من قبل Discourse” قبل أن أغوص كثيرًا في أي اتجاه.
قد يكون هذا هو الحال في الأيام الأولى، لكن في الوقت الحاضر الأمر معاكس تمامًا. لقد قمنا حتى بهجرة إضافاتنا الخاصة من الحقول المخصصة إلى جداول خاصة بها حيثما كان ذلك منطقيًا، مثل إضافة الاستطلاعات وإضافة التصويت.
يجب على الإضافات ذات نماذج البيانات الغنية إنشاء نماذجها وجداولها وعلاقاتها وهجراتها الخاصة. هذا أكثر قابلية للصيانة وسيوفر أداءً ممتازًا. فقط احذر من مشكلة N+1
أهلاً، رائع. سعيد لأنني سألت إذن. هل توجد طريقة موصى بها لتعديل النماذج الأساسية من داخل إضافة بلدي؟
أود إضافة بعض التعريفات والعلاقات المخصصة، مثل علاقة hasmanythrough مع جداولي الجديدة، ولست متأكداً حقاً من أفضل طريقة للقيام بذلك، سوى استدعاء دوال على النموذج الجديد حيث يتعين علي تمرير معرفات الفئة والمستخدم، وما إلى ذلك.