Ciao a tutti,
Sto imparando come estendere i serializer di Discourse e mi sono imbattuto in un comportamento che non capisco del tutto.
Ho aggiunto questo codice per sovrascrivere 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
Questo funziona perfettamente.
Tuttavia, se lo modifico per usare super:
require_dependency "post_serializer"
class ::PostSerializer
def raw
if scope.can_edit?(object)
super
else
object.raw&.truncate(300)
end
end
end
Quando scope.can_edit?(object) è vero, la chiamata a super causa un errore 500 per /posts/:id.json.
So che posso evitare il problema usando object.raw invece di super, ma voglio capire perché super causa un’eccezione in questo caso, specialmente perché sovrascrivo anche altri metodi (cooked, post_stream, ecc.) e super funziona bene in quei casi.
Dato che sono ancora nuovo agli interni di Discourse, apprezzerei molto una spiegazione su:
- a cosa si risolve
superall’interno diPostSerializer#raw, - perché chiamare
superin questo caso porta a un errore 500, - e perché
rawsi comporta diversamente rispetto a metodi comecooked.
Grazie in anticipo per qualsiasi aiuto!