如何让序列化程序不包含仅针对特定方法的关联表?

时间:2016-01-17 19:48:58

标签: ruby-on-rails ruby json serialization active-model-serializers

我正在学习如何使用active_model_serializersgem)。在组织序列化程序中,我有:

has_many :nodes

现在,当我为组织的数据发出API请求时,它会自动发送关联节点的属性。

例如,对组织控制器的show方法的GET请求生成包含组织和节点属性的JSON。这很有效。

这对于show方法是完美的,但是对于索引方法的GET请求,我希望仅包含组织的属性而不包括关联节点。这可能吗?

1 个答案:

答案 0 :(得分:2)

您可以为不同的操作创建不同的序列化程序:

class ShallowOrganizationSerializer < ActiveModel::Serializer
    attributes :id, :name # ....
end

class DetailedOrganizationSerializer < ShallowOrganizationSerializer
    has_many :nodes
end

在你的控制器中:

class OrganizationController < ApplicationController
    def index
        # ...
        render json: @organizations, each_serializer: ShallowOrganizationSerializer
    end

    def show
        # ...
        render json: @organization, serializer: DetailedOrganizationSerializer
    end
end