Olá a todos,
Estou aprendendo a estender os serializadores do Discourse e encontrei um comportamento que não entendo completamente.
Adicionei este código para sobrescrever 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
Isso funciona perfeitamente.
No entanto, se eu mudar para usar 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) é verdadeiro, a chamada para super faz com que /posts/:id.json retorne um erro 500.
Eu sei que posso evitar o problema usando object.raw em vez de super, mas quero entender por que super causa uma exceção aqui, especialmente porque eu também sobrescrevo outros métodos (cooked, post_stream, etc.) e super funciona bem nesses casos.
Como ainda sou novo nos internos do Discourse, agradeceria muito uma explicação sobre:
- a que
superse resolve dentro dePostSerializer#raw, - por que chamar
superneste caso leva a um erro 500, - e por que
rawse comporta de maneira diferente em comparação com métodos comocooked.
Agradeço antecipadamente por qualquer ajuda!