5

API で Active Model Serializer gem を使用しようとしていますが、非常に単純だと思っていたものに苦労しています。

すべての JSON 応答はラップされた形式であり、すべての応答には最上位のメッセージとステータス プロパティがあり、データは content プロパティ内にあります。すべての 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!" }
  ]
}

または、それらを最上位のキーにする必要がある場合は、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 に答える