有没有办法手动序列化集合?

时间:2015-09-21 01:26:20

标签: ruby-on-rails json-api jsonapi-resources rspec-api-documentation

我想手动序列化一个集合以进行测试。我试过这个:

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

这不起作用。您似乎只能在此处序列化单个资源。如何返回所有帖子的序列化集合?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

希望它对你有用: - )

答案 2 :(得分:0)

如果您使用ActiveModelSerializershttps://github.com/rails-api/active_model_serializers

尝试做这样的帮助:

V_err

您可以将此模式用于一个资源或多个资源。 在你的情况下,它将是:

Km_err