Привет, сообщество Discourse. Я не нашёл похожей темы, поэтому решил создать свою.
Я использую плагин для расширения функциональности Discourse в интересах моей организации. Одна из задач — рендеринг JSON по пути email/unsubscribe/{KEY}, так как мы хотим управлять этими опциями с другого сервера, отличного от того, на котором запущен наш экземпляр Discourse. Эта конечная точка находится в ведении EmailController, и по умолчанию EmailControllerHelper устанавливает переменные экземпляра для контроллера перед рендерингом представления. Вместо этого я хотел бы возвращать EmailController в формате JSON.
Так что мой основной вопрос: возможно ли сериализовать контроллер? То есть, могу ли я определить сериализатор для контроллера вот так:
class ::EmailController
# ФАЙЛ, КОТОРЫЙ МОДИФИЦИРУЕТСЯ: app/controllers/email_controller.rb
# Возврат 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
или мне лучше прибегнуть к грубой силе?
class ::EmailController
# ФАЙЛ, КОТОРЫЙ МОДИФИЦИРУЕТСЯ: app/controllers/email_controller.rb
# Возврат JSON
module ReturnAsJSON
def unsubscribe
super
render json: {type: @type, unsubscribed_from_all: @unsubscribed_from_all, и т.д.}
end
end
prepend ReturnAsJSON
end
Второй подход, похоже, работает, так что если первый не сработает, у меня как минимум будет хорошее решение-обходной путь.