【问题标题】:Is there a way to manually serialize a collection?有没有办法手动序列化一个集合?
【发布时间】:2015-12-17 14:44:52
【问题描述】:
我想手动序列化一个集合以进行测试。我试过这个:
JSONAPI::ResourceSerializer.new(PostResource).
serialize_to_hash(PostResource.new(Post.all))
这不起作用。看来您只能在此处序列化单个资源。如何返回所有帖子的序列化集合?
【问题讨论】:
标签:
ruby-on-rails
json-api
jsonapi-resources
rspec-api-documentation
【解决方案2】:
另一种基于 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
希望对你有用:-)
【解决方案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 会自己处理它,而不需要手动序列化。但确实,我可以想象一些场景,我希望能够手动序列化记录集合,所以应该有一些简单的方法来做到这一点......不幸的是,看起来没有简单的方法现在。
更新:
我自己还有一些问题,所以我在这里询问了 gem 的创建者:https://github.com/cerebris/jsonapi-resources/issues/460