3

テスト目的でコレクションを手動でシリアライズしたいと考えています。私はこれを試しました:

JSONAPI::ResourceSerializer.new(PostResource).
  serialize_to_hash(PostResource.new(Post.all))

これはうまくいきません。ここでは単一のリソースしかシリアル化できないようです。すべての投稿のシリアル化されたコレクションを返すにはどうすればよいでしょうか?

4

3 に答える 3

3

私は同じことを試みていましたが、それは不可能です。JSONAPI::Resource には、 Relation オブジェクトまたはレコードの配列を JSONAPI::Resource インスタンスに簡単に変換するためのヘルパーがないため、このようにコレクションを渡すことはできません。

serialize_to_hash は JSONAPI::Resource の配列を想定しているので、次のような恐ろしいことをしなければなりません:

result = []
Post.all.each do |post|
  result << PostResource.new(post)
end

JSONAPI::ResourceSerializer.new(PostResource).serialize_to_hash(result)

JSONAPI::Resources は、JSONAPI 自体で十分であることを想定しているため、index などのメソッドの実装は必要ありません。gem は、手動のシリアル化を必要とせずにそれ自体を処理します。しかし、レコードのコレクションを手動でシリアル化できるようにしたいいくつかのシナリオを想像できるのは事実です。そのため、これを行う簡単な方法があるはずです...残念ながら、簡単な方法はないようです今。

更新: 私は自分自身にさらに質問があったので、ここで宝石の作成者に尋ねました: https://github.com/cerebris/jsonapi-resources/issues/460

于 2015-09-25T15:17:06.043 に答える
0

ActiveModelSerializersを使用している場合( https://github.com/rails-api/active_model_serializers )

次のようにヘルパーを実行してみてください。

def serialize_resource(resource)
  JSON.parse(ActiveModelSerializers::SerializableResource.new(resource).to_json)
end

このパターンは、1 つのリソースまたは複数のリソースの両方に使用できます。あなたの場合は次のようになります。

JSON.parse(ActiveModelSerializers::SerializableResource.new(Post.all).to_json)
于 2016-12-12T09:46:13.197 に答える
0

JSONAPI リソース機能に基づいて手動でデータをシリアル化する別の方法は、jsonapi-utils gemを使用することです。

jsonapi_serializeメソッドで:

class API::V1::UsersController < API::V1::BaseController
  def index
    users = User.all 
    render json: jsonapi_serialize(users)
  end
end

または高レベルのjsonapi_render方法:

class API::V1::UsersController < API::V1::BaseController
  def index
    jsonapi_render json: User.all
  end
end

お役に立てば幸いです:-)

于 2015-12-29T00:18:12.203 に答える