Hola comunidad de Discourse. No encontré un tema similar, así que pensé en iniciar uno.
Estoy usando un plugin para extender la funcionalidad de Discourse para los propósitos de mi organización. Una de estas es renderizar un JSON desde email/unsubscribe/{KEY}, ya que nos gustaría controlar estas opciones desde un servidor diferente al que ejecutamos nuestra instancia de Discourse. Ese endpoint está bajo la supervisión del EmailController, y por defecto el EmailControllerHelper establece variables de instancia para el controlador antes de renderizar una vista. En cambio, me gustaría devolver el EmailController como un JSON.
Entonces, mi pregunta fundamental es, ¿es posible serializar un controlador? Es decir, ¿puedo definir un serializador para el controlador como este?
class ::EmailController
# EL ARCHIVO QUE ESTO MODIFICA: app/controllers/email_controller.rb
# Devolver 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 es mejor que lo fuerce?
class ::EmailController
# EL ARCHIVO QUE ESTO MODIFICA: app/controllers/email_controller.rb
# Devolver un json
module ReturnAsJSON
def unsubscribe
super
render json: {type: @type, unsubscribed_from_all: @unsubscribed_from_all, etc.}
end
end
prepend ReturnAsJSON
end
El segundo enfoque parece funcionar, así que si el primer enfoque no lo hace, al menos tengo una solución alternativa decente.