Bonjour à tous,
J’apprends à étendre les serializers de Discourse et je suis tombé sur un comportement que je ne comprends pas entièrement.
J’ai ajouté ce code pour surcharger 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
Cela fonctionne parfaitement.
Cependant, si je le modifie pour utiliser super :
require_dependency "post_serializer"
class ::PostSerializer
def raw
if scope.can_edit?(object)
super
else
object.raw&.truncate(300)
end
end
end
Lorsque scope.can_edit?(object) est vrai, l’appel à super provoque une erreur 500 lors de la requête à /posts/:id.json.
Je sais que je peux éviter le problème en utilisant object.raw au lieu de super, mais je veux comprendre pourquoi super provoque une exception dans ce cas, d’autant plus que je surcharge d’autres méthodes (cooked, post_stream, etc.) et que super fonctionne bien dans ces cas.
Comme je suis encore nouveau dans les mécanismes internes de Discourse, j’apprécierais vraiment une explication sur :
- à quoi
superse résout à l’intérieur dePostSerializer#raw, - pourquoi appeler
superdans ce cas conduit à une erreur 500, - et pourquoi
rawse comporte différemment par rapport à des méthodes commecooked.
Merci d’avance pour toute aide !