مرحباً بمجتمع 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, etc.}
end
end
prepend ReturnAsJSON
end
يبدو أن النهج الثاني يعمل، لذلك إذا لم ينجح النهج الأول، فعلى الأقل لدي حل بديل جيد.