Hola a todos,
Estoy aprendiendo a extender los serializadores de Discourse y me encontré con un comportamiento que no entiendo del todo.
Agregué este código para sobrescribir 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
Esto funciona perfectamente.
Sin embargo, si lo cambio 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
Cuando scope.can_edit?(object) es true, la llamada a super provoca un error 500 en /posts/:id.json.
Sé que puedo evitar el problema usando object.raw en lugar de super, pero quiero entender por qué super causa una excepción en este caso, especialmente porque también sobrescribo otros métodos (cooked, post_stream, etc.) y super funciona bien en esos casos.
Como todavía soy nuevo en el funcionamiento interno de Discourse, agradecería mucho una explicación de:
- a qué resuelve
superdentro dePostSerializer#raw, - por qué llamar a
superen este caso conduce a un error 500, - y por qué
rawse comporta de manera diferente en comparación con métodos comocooked.
¡Gracias de antemano por cualquier ayuda!