5

我正在尝试将 Active Model Serializer gem 与我的 API 一起使用,尽管我正在努力解决我认为非常简单的事情。

我所有的 JSON 响应都采用包装格式,每个响应都具有顶级消息和状态属性,数据位于内容属性中。每个 JSON 响应都遵循这种格式。

例子

{
  'status': statuscode,
  'message': message,
  'content': { 'object':obj }
}

“内容”属性的内容是我想放置序列化程序输出的地方。我的文章列表等。

我无法弄清楚如何做到这一点?

任何帮助将不胜感激。

4

1 回答 1

1

如果您不介意您的状态和消息散列在散列中,则可以使用元键。

(来自 https://github.com/rails-api/active_model_serializers/tree/0-8-stable

render :json => @posts, :serializer => CustomArraySerializer, :meta => {:total => 10}

=> 
 {
  "meta": { "total": 10 },
  "posts": [
    { "title": "Post 1", "body": "Hello!" },
    { "title": "Post 2", "body": "Goodbye!" }
  ]
}

或者,如果您需要它们成为顶级键,您可以 SubClass ArraySerializer 并覆盖 as_json 以允许它合并到您的键中。

def as_json(*args)
    @options[:hash] = hash = {}
    @options[:unique_values] = {}

    hash.merge!(@options[:top_level_keys]) if @options.key?(:top_level_keys)

    root = @options[:root]
    if root.present?
      hash.merge!(root => serializable_array)
      include_meta(hash)
      hash
    else
      serializable_array
    end
  end 

那么就

render :json @object, :serializer => YourCustomArraySerializer

于 2014-12-20T03:36:32.353 回答