Hallo Discourse-Community. Ich habe kein ähnliches Thema gefunden, also dachte ich, ich eröffne eines.
Ich verwende ein Plugin, um die Funktionalität von Discourse für die Zwecke meiner Organisation zu erweitern. Eine davon ist das Rendern eines JSON von email/unsubscribe/{KEY}, da wir diese Optionen von einem anderen Server als dem, auf dem wir unsere Discourse-Instanz betreiben, steuern möchten. Dieser Endpunkt liegt im Zuständigkeitsbereich des EmailController, und standardmäßig setzt der EmailControllerHelper Instanzvariablen für den Controller, bevor eine Ansicht gerendert wird. Stattdessen möchte ich den EmailController als JSON zurückgeben.
Meine grundlegende Frage ist also: Ist es möglich, einen Controller zu serialisieren? D. h. kann ich einen Serializer für den Controller wie folgt definieren:
class ::EmailController
# DIE DATEI, DIE DIESE MODIFIZIERT: app/controllers/email_controller.rb
# Gibt ein JSON zurück
module ReturnAsJSON
def unsubscribe
super
render EmailUnsubscribeSerializer.new(self, root: false).to_json
end
end
prepend ReturnAsJSON
end
class EmailUnsubscribeSerializer < ApplicationSerializer
attributes :topic, :type, :unsubscribed_from_all, :user
def user
BasicUserSerializer.new(object.user, root: false).as_json
end
end
oder ist es besser, dies mit Gewalt zu erzwingen?
class ::EmailController
# DIE DATEI, DIE DIESE MODIFIZIERT: app/controllers/email_controller.rb
# Gibt ein JSON zurück
module ReturnAsJSON
def unsubscribe
super
render json: {type: @type, unsubscribed_from_all: @unsubscribed_from_all, etc.}
end
end
prepend ReturnAsJSON
end
Der 2. Ansatz scheint zu funktionieren, also wenn der 1. Ansatz nicht funktioniert, habe ich zumindest einen anständigen Workaround.