Ciao community di Discourse. Non ho trovato un argomento simile, quindi ho pensato di iniziarne uno.
Sto usando un plugin per estendere la funzionalità di Discourse per scopi della mia organizzazione. Una di queste è il rendering di un JSON da email/unsubscribe/{KEY}, poiché vorremmo controllare queste opzioni da un server diverso da quello su cui eseguiamo la nostra istanza Discourse. Tale endpoint è sotto la responsabilità dell’EmailController e, per impostazione predefinita, EmailControllerHelper imposta variabili di istanza per il controller prima di renderizzare una vista. Invece, vorrei restituire l’EmailController come JSON.
Quindi la mia domanda di base è: è possibile serializzare un controller? Cioè, posso definire un serializzatore per il controller come questo:
class ::EmailController
# IL FILE CHE QUESTO MODIFICA: app/controllers/email_controller.rb
# Restituisce un json
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
o è meglio che lo forzi manualmente?
class ::EmailController
# IL FILE CHE QUESTO MODIFICA: app/controllers/email_controller.rb
# Restituisce un json
module ReturnAsJSON
def unsubscribe
super
render json: {type: @type, unsubscribed_from_all: @unsubscribed_from_all, ecc.}
end
end
prepend ReturnAsJSON
end
Il secondo approccio sembra funzionare, quindi se il primo approccio non funziona almeno ho una buona soluzione alternativa.