将Active Model Serializer从0.8迁移到0.10 rc2

时间:2015-07-23 06:55:03

标签: active-model-serializers

我们已经使用Grape和Active Model Serializers 0.8构建了一个API。现在我们想要使用0.10的所有缓存优势,因此正在迁移到新的向后兼容版本。

目前有两个问题:

  1. 似乎无法在序列化程序中使用self.root=重新定义根密钥。例如。我们已获得SimpleUserSerializer,我们希望根密钥为user而不是simple_user。解决方案是在渲染序列化程序时指定root,但是我们需要在许多地方进行更改。有没有办法重新定义此序列化程序的根密钥,无论它在何处/如何呈现?

  2. embed :ids, include: true选项不受支持,应该可以通过适配器实现。是否有计划为遗留项目发布或维护0.8兼容的适配器?

  3. 任何有关迁移的指导都会有所帮助,因为我找不到任何官方文档。

2 个答案:

答案 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