디스코urs 커뮤니티 여러분, 안녕하세요. 비슷한 주제를 찾지 못해서 새로 시작해 보았습니다.
저희 조직의 목적에 맞춰 디스코urs 기능을 확장하기 위해 플러그인을 사용 중입니다. 그중 하나는 email/unsubscribe/{KEY}에서 JSON을 렌더링하는 것입니다. 이 옵션들을 디스코urs 인스턴스를 실행하는 서버가 아닌 다른 서버에서 제어하기를 원하기 때문입니다. 해당 엔드포인트는 EmailController의 관할 영역에 있으며, 기본적으로 EmailControllerHelper는 뷰를 렌더링하기 전에 컨트롤러의 인스턴스 변수를 설정합니다. 대신 저는 EmailController를 JSON으로 반환하고 싶습니다.
결국 제 질문의 핵심은 컨트롤러를 직렬화할 수 있는지 여부입니다. 즉, 다음과 같이 컨트롤러에 대한 직렬화기를 정의할 수 있을까요?
class ::EmailController
# THE FILE THIS MODIFIES: app/controllers/email_controller.rb
# Return a 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
# THE FILE THIS MODIFIES: app/controllers/email_controller.rb
# Return a json
module ReturnAsJSON
def unsubscribe
super
render json: {type: @type, unsubscribed_from_all: @unsubscribed_from_all, etc.}
end
end
prepend ReturnAsJSON
end
두 번째 접근 방식은 작동하는 것처럼 보이므로, 첫 번째 방식이 작동하지 않더라도 적어도 괜찮은 우회 방법이 있는 셈입니다.