大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 使用active_model_serializers序列化深度嵌套的关联,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我是API的新手,选择了active_model_serializers,因为它似乎正在成为rails的标准(尽管我不反对使用RABL或另一个serializer)
我遇到的问题是,我似乎不能在多层次关系中包含各种属性.例如我有:
项目
class Projectserializer < ActiveModel::serializer attributes :id,:name,:updated_at has_many :estimates,include_nested_associations: true end
和估计
class Estimateserializer < ActiveModel::serializer attributes :id,:release_version,:exchange_rate,:updated_at,:project_id,:project_code_id,:tax_type_id belongs_to :project belongs_to :project_code belongs_to :tax_type has_many :proposals end
建议
class Proposalserializer < ActiveModel::serializer attributes :id,:estimate_id belongs_to :estimate end
当我打了/ projects / 1以上产生:
{ "id": 1,"name": "123 Park Ave.","updated_at": "2015-08-09T02:36:23.950Z","estimates": [ { "id": 1,"name": "E1","release_version": "v1.0","exchange_rate": "0.0","updated_at": "2015-08-12T04:23:38.183Z","project_id": 1,"project_code_id": 8,"tax_type_id": 1 } ] }
但是,我想要的是:
{ "id": 1,"project": { "id": 1,"name": "123 Park Ave." },"project_code": { "id": 8,"valuation": 30 },"tax_type": { "id": 1,"name": "no-tax" },"proposals": [ { "id": 1,"name": "P1","updated_at": "2015-08-12T04:23:38.183Z" },{ "id": 2,"name": "P2","updated_at": "2015-10-12T04:23:38.183Z" } ] } ] }
理想情况下,我也希望能够指定每个序列化程序中包含的那些关联的哪些属性,关联和属性.
我一直在看AMS的问题,似乎有一些来回说明如何处理(或者如果这种功能甚至实际上得到支持),但我很难弄清楚目前的情况状态是.
> https://github.com/rails-api/active_model_serializers/issues/835
> https://github.com/rails-api/active_model_serializers/issues/968
> https://github.com/rails-api/active_model_serializers/issues/414
> https://github.com/rails-api/active_model_serializers/issues/444
所提出的解决方案之一是用调用嵌套属性的方法覆盖属性,但这似乎被认为是一个黑客,所以我想尽可能的避免它.
无论如何,一个例子说明如何处理这个或一般的API建议将是非常感激的.
如果您希望默认深度嵌套,则可以在active_model_serializer初始值设置中设置配置属性:
以上是大佬教程为你收集整理的ruby-on-rails – 使用active_model_serializers序列化深度嵌套的关联全部内容,希望文章能够帮你解决ruby-on-rails – 使用active_model_serializers序列化深度嵌套的关联所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。