Hallo zusammen,
ich lerne gerade, wie man Discourse Serializer erweitert, und bin auf ein Verhalten gestoßen, das ich nicht ganz verstehe.
Ich habe diesen Code hinzugefügt, um PostSerializer#raw zu überschreiben:
require_dependency "post_serializer"
class ::PostSerializer
def raw
if scope.can_edit?(object)
object.raw
else
object.raw&.truncate(300)
end
end
end
Das funktioniert einwandfrei.
Wenn ich es jedoch ändere, um super zu verwenden:
require_dependency "post_serializer"
class ::PostSerializer
def raw
if scope.can_edit?(object)
super
else
object.raw&.truncate(300)
end
end
end
Wenn scope.can_edit?(object) wahr ist, führt der Aufruf von super dazu, dass /posts/id.json einen 500er Fehler zurückgibt.
Ich weiß, dass ich das Problem vermeiden kann, indem ich object.raw anstelle von super verwende, aber ich möchte verstehen, warum super in diesem Fall eine Ausnahme auslöst, insbesondere weil ich auch andere Methoden überschreibe (cooked, post_stream usw.) und super in diesen Fällen einwandfrei funktioniert.
Da ich noch neu in den internen Abläufen von Discourse bin, würde ich mich über eine Erklärung freuen, was:
superinnerhalb vonPostSerializer#rawtatsächlich auflöst,- warum der Aufruf von
superin diesem Fall zu einem 500er Fehler führt, - und warum sich
rawanders verhält als Methoden wiecooked.
Vielen Dank im Voraus für jede Hilfe!