我在API控制器中有以下方法:
module Api
module V1
class ArticlesController < Api::BaseController
def show
article = Article.find(params[:id])
render json: article
end
end end end
使用active_model_serializers
gem时,我有以下序列化程序:
class Api::V1::ArticleSerializer < ActiveModel::Serializer
attributes :id, :author_id, :title, :description
end
对于所有API请求,服务器应包含有关会话的信息,例如api令牌和当前用户。因此,在上面的例子中,生成的json不仅应该包含文章序列化程序中提到的属性,还应该包括例如api标记。
通常会将此会话信息包含在哪里以及如何发送到API前端?这可能是一个单独的序列化程序,除了在这种情况下包含文章序列化程序?
答案 0 :(得分:1)
由于您希望将此信息附加到所有API响应,因此有一个超类序列化程序对此负责是有意义的,所有其他序列化程序都继承自:
class SerializerWithSessionMetadata < ActiveModel::Serializer
attributes :token, :user
def token
# ...
end
def user
# ...
end
end
然后您的序列化程序将继承此而不是ActiveModel::Serializer
:
class ArticleSerializer < SerializerWithSessionMetadata
# ...
end
或者,您可以将其作为序列化程序中包含的模块:
module SessionMetadataSerializer
def self.included(klass)
klass.attributes :token, :user
end
def token
# ...
end
# ...
end
然后:
class Api::V1::ArticleSerializer < ActiveModel::Serializer
include SessionMetadataSerializer
attributes :id, :author_id, :title, :description
end