أقوم بتطوير إضافة ستضيف قيمة منطقية (boolean) بناءً على بعض المنطق المخصص إلى جدول user_custom_fields لكل مستخدم غير مسموح له بإنشاء موضوع جديد.
user.custom_fields['can_create_topic'] = false;
ما الذي أريد فعله؟
أريد إخفاء زر “+ موضوع جديد” لبعض المستخدمين بناءً على منطق مخصص.
السؤال
هل من الممكن تخصيص can_create_topic في guardian بحيث يقوم بفحص إضافي على حقل مخصص في جدول المستخدمين (user_custom_field) لتحديد ما إذا كان مسموحًا للمستخدم بإنشاء موضوع جديد أم لا؟
نعم، بالطبع يمكنك تعديل فئات Ruby باستخدام الإضافات. إنه برنامج، سهل التعديل، وليس سفرًا بين المجرات باستخدام الأشرعة الشمسية أو الثقوب الدودية، لذا فمن الطبيعي أن يكون من الممكن تعديل سلوك Discourse باستخدام إضافة:
@pfaffman هذه فكرة جيدة أيضًا. لكن أعتقد أنه إذا تمكنت من تجاوز طريقة can_create_topic? في TopicGuardian، فسيكون ذلك حلاً أنظف. هل هناك أي إضافة يمكنني الرجوع إليها تحتوي على تغيير مشابه؟
ما لا أعرفه هو كيف يمكنني جعل فئة TopicGuardian الخاصة بي ترث من الإضافة لاستبدال TopicGuardian في فئة Guardian، لأنها تُدمج بدلاً من حقن التبعية.
حسنًا، أعتقد أنني وجدت إجابتي. كل ما علي فعله هو تنفيذ طريقة “can_create_topic؟” في module ::TopicGuardian، وسيتغير سلوك TopicGuardian تلقائيًا دون الحاجة إلى حقنه أو تسجيله في مكان ما. بالإضافة إلى ذلك، يمكنني استخدام طريقة super داخل طريقة التعديل الخاصة بي حتى لا أضطر إلى مزامنتها يدويًا مع الطريقة الأصلية في حال تم تغييرها.