Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 使用active_model_serializers序列化深度嵌套的关联大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用的是Rails 4.2.1和active_model_serializers 0.10.0.rc2

我是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建议将是非常感激的.

解决方法

每个提交1426: https://github.com/rails-api/active_model_serializers/pull/1426 – 和相关讨论,您可以看到json和属性序列化的默认嵌套是一个级别.

如果您希望默认深度嵌套,则可以在active_model_serializer初始值设置中设置配置属性:

ActiveModelserializers.config.default_includes =’**

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – 使用active_model_serializers序列化深度嵌套的关联全部内容,希望文章能够帮你解决ruby-on-rails – 使用active_model_serializers序列化深度嵌套的关联所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。