مرحباً بالجميع،
أنا أتعلم كيفية توسيع مُسلسِلات (serializers) ديسكورس (Discourse)، وواجهت سلوكًا لا أفهمه تمامًا.
أضفت هذا الكود لتجاوز PostSerializer#raw:
require_dependency "post_serializer"
class ::PostSerializer
def raw
if scope.can_edit?(object)
object.raw
else
object.raw&.truncate(300)
end
end
end
هذا يعمل بشكل مثالي.
ولكن، إذا قمت بتغييره لاستخدام super:
require_dependency "post_serializer"
class ::PostSerializer
def raw
if scope.can_edit?(object)
super
else
object.raw&.truncate(300)
end
end
end
عندما تكون scope.can_edit?(object) صحيحة، فإن الاستدعاء إلى super يتسبب في إرجاع /posts/:id.json خطأ 500.
أعلم أنه يمكنني تجنب المشكلة باستخدام object.raw بدلاً من super، ولكني أريد أن أفهم لماذا يتسبب super في حدوث استثناء هنا، خاصة وأنني أقوم بتجاوز طرق أخرى (مثل cooked و post_stream، إلخ) ويعمل super بشكل جيد في تلك الحالات.
بما أنني ما زلت جديدًا على الأجزاء الداخلية لديسكورس، سأكون ممتنًا جدًا للحصول على شرح حول:
- ما الذي يحل محله
superبالضبط داخلPostSerializer#raw، - لماذا يؤدي استدعاء
superفي هذه الحالة إلى خطأ 500، - ولماذا يتصرف
rawبشكل مختلف مقارنة بالطرق مثلcooked.
شكرًا مقدمًا على أي مساعدة!