我想手动序列化一个集合以进行测试。我试过这个:
JSONAPI::ResourceSerializer.new(PostResource).
serialize_to_hash(PostResource.new(Post.all))
这行不通。看来您只能在此处序列化单个资源。如何返回所有帖子的序列化集合?
我想手动序列化一个集合以进行测试。我试过这个:
JSONAPI::ResourceSerializer.new(PostResource).
serialize_to_hash(PostResource.new(Post.all))
这行不通。看来您只能在此处序列化单个资源。如何返回所有帖子的序列化集合?
我正在尝试同样的事情 - 但这是不可能的。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
另一种基于 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
希望它对你有用:-)
如果您使用ActiveModelSerializers ( https://github.com/rails-api/active_model_serializers )
尝试做这样的助手:
def serialize_resource(resource)
JSON.parse(ActiveModelSerializers::SerializableResource.new(resource).to_json)
end
您可以将此模式用于一个资源或多个资源。在您的情况下,它将是:
JSON.parse(ActiveModelSerializers::SerializableResource.new(Post.all).to_json)