我们已经使用Grape和Active Model Serializers 0.8构建了一个API。现在我们想要使用0.10的所有缓存优势,因此正在迁移到新的向后兼容版本。
目前有两个问题:
似乎无法在序列化程序中使用self.root=
重新定义根密钥。例如。我们已获得SimpleUserSerializer
,我们希望根密钥为user
而不是simple_user
。解决方案是在渲染序列化程序时指定root,但是我们需要在许多地方进行更改。有没有办法重新定义此序列化程序的根密钥,无论它在何处/如何呈现?
embed :ids, include: true
选项不受支持,应该可以通过适配器实现。是否有计划为遗留项目发布或维护0.8兼容的适配器?
任何有关迁移的指导都会有所帮助,因为我找不到任何官方文档。
答案 0 :(得分:2)
第一个问题可以通过定义返回根密钥的类方法root_name
来解决。这可以在fixtures in AMS tests中找到。
仍在处理第二个问题。
答案 1 :(得分:-1)
官方指南可能会有所帮助: https://github.com/rails-api/active_model_serializers/blob/0-10-stable/docs/howto/upgrade_from_0_8_to_0_10.md
如果没有帮助,请尝试以下操作:
In the previous version, we would specify the root as follows:
class UserSerializer < ActiveModel::Serializer
self.root = "application_user"
end
or:
class UserSerializer < ActiveModel::Serializer
root "application_user"
end
They both stopped working after the upgrade and we had to change it to:
class UserSerializer < ActiveModel::Serializer
type "application_user"
end
这:
Root key not included in JSON
To fix that we had to configure json as the adapter (the new library default is attributes).
ActiveModelSerializers.config.adapter = :json
完整的升级指南: http://engineering.liefery.com/2017/11/07/upgrading-active-model-serializers-from-0-8-to-0-10.html