ruby-on-rails – 在rails api活动模型序列化程序中为关联属性使
发布时间:2020-12-17 04:25:00 所属栏目:百科 来源:网络整理
导读:我正在使用 rails-api和 active-model-serializer构建一个 Rest API,以便轻松过滤JSON中的必填字段.我也在这些序列化器中使用has_one关联.我想知道的是如何为has_one属性指定不同的键名. 也就是说,我有两个模型说:Employee和Address,并且在EmployeeSerializ
我正在使用
rails-api和
active-model-serializer构建一个
Rest API,以便轻松过滤JSON中的必填字段.我也在这些序列化器中使用has_one关联.我想知道的是如何为has_one属性指定不同的键名.
也就是说,我有两个模型说:Employee和Address,并且在EmployeeSerializer中有一个has_one:地址.我得到的回应是: { id: 1,address: { street: "some_street",city: "some_city" } } 但我想得到以下回应: { id: 1,stays: { street: "some_street",city: "some_city" } } 我尝试使用has_one:address,:key => :停留,但这似乎不起作用. 解决方法
您可以将stay定义为您希望在json中拥有的属性之一.
当然,序列化程序将转到模型实例,而不是在具有该名称的模型中找到属性.所以,它会坐在那里,摸不着头脑中的价值:停留应该是什么. 没关系,因为您可以在序列化程序中定义一个实例方法,告诉它该值应该是什么.在该实例方法中,您将获得对象变量,它是序列化程序当前正在处理的对象.因此,object.address将是您的Address实例. 获得地址实例后,可以实例化一个序列化程序,该序列化程序将使用该实例显示其中列出的字段.我相信,root:false是必要的,否则,:stay属性(或者在这种情况下序列化程序返回的任何内容)将显示在另一个:retain属性中. 您对Employee的最终序列化程序应如下所示: class EmployeeSerializer < ActiveModel::Serializer attributes :id,:name,:stays def stays MyAddressSerializer.new(object.address,root: false) end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |