如何包含要发送到前端的令牌和其他会话信息?

时间:2016-01-22 14:44:37

标签: ruby-on-rails ruby json api serialization

我在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前端?这可能是一个单独的序列化程序,除了在这种情况下包含文章序列化程序?

1 个答案:

答案 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