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
类ASerializer 但是,这也会呈现
BSerializer
中定义的所有属性。我可以定义一个
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
这样的函数来说,这似乎很麻烦?或者这是可以遗传的?