Ruby on rails 在ActiveModel::Serializer中,如何仅使用id呈现json api关系
使用Ruby on rails 在ActiveModel::Serializer中,如何仅使用id呈现json api关系,ruby-on-rails,active-model-serializers,Ruby On Rails,Active Model Serializers,使用ActiveModel::Serializer(0.10.0.rc3)使用json api适配器,如何在默认情况下仅呈现id关系 以我的序列化程序为例 class ASerializer < Api::V1::BaseSerializer attributes :id, :name has_many :bs end 类ASerializer
ActiveModel::Serializer
(0.10.0.rc3)使用json api
适配器,如何在默认情况下仅呈现id关系
以我的序列化程序为例
class ASerializer < Api::V1::BaseSerializer
attributes :id, :name
has_many :bs
end
类ASerializerBSerializer
中定义的所有属性。我可以定义一个BMiniSerializer
来只呈现id
,并将其用作
有很多:bs,serializer:BMiniSerializer
,但这意味着我必须对所有模型执行此操作,并将其添加到所有序列化程序中。有没有更优雅的默认方式
编辑
我想这就是
:include
和:fields
的作用。不幸的是,由于我使用的API控制器和序列化程序的名称空间与我的模型不同,因此我需要为相关模型明确指定序列化程序,以便:include
和:fields
工作。让我在Order
和OrderItem
类的示例中展示它。我还假设我们使用的是版本0.10.0.rc3
,因为在0.9.x
中,它以另一种方式工作
您应该通过向序列化程序传递参数来定制json。例如:
render json: @orders, short: true
参数:short
现在可以在OrderSerializer
的初始值设定项中访问:
def initialize(object, options = {})
@short = options[:short]
super
end
我们将此参数保存为@short
实例变量。现在我们可以定义order\u items
函数,当使用short:true
调用时,该函数将仅包括id
:
def order_items
if @short
object.order_items.map{|x| [:id,x.id]}.to_h
else
object.order_items
end
end
我还没有尝试过这种方法,但对于必须为每个关联和每个模型定义
order\u items
这样的函数来说,这似乎很麻烦?或者这是可以遗传的?