您好,Discourse 社区。我没有找到类似的主题,所以我想开一个。
我正在使用一个插件来扩展 Discourse 的功能,以满足我组织的需要。其中一项功能是从 email/unsubscribe/{KEY} 渲染一个 JSON,因为我们希望从运行 Discourse 实例的服务器以外的服务器来控制这些选项。该端点由 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
第二种方法看起来可行,所以如果第一种方法不行,至少我有一个不错的解决方法。