我正在使用活动模型序列化程序gem,它现在可以正常工作。然而,我偶然发现了一个问题,我不想停止检索数据的嵌套。
假设我有3个型号:
Users
has_many orders
谁has_many addresses
。
通常在我的Users serializer class
中我会has_many
orders model
,而订单模型序列化器与has_many
的关系addresses
我现在有一个用户控制器,我不希望订单输出,但不是嵌套地址。这可以在不创建全新的序列化程序类的情况下完成吗?
更新,澄清:
我有以下3个型号:
class User < ActiveRecord::Base
has_many orders
end
class Orders < ActiveRecord::Base
belongs_to user
has_many addresses
end
class Addresses < ActiveRecord::Base
belongs_to order
end
我有3个与模型相同的序列化器。
对于我的订单API我也想检索地址,但是当我查询用户时我只想要关联的订单而不是地址。就像现在我查询用户时它返回所有订单和地址,因为我有一个has_many来自订单的地址。
是为这两个选项创建单独的序列化程序的唯一选择(它感觉不是很干)?
答案 0 :(得分:1)
您可以使用定义序列化程序选项的default_serializer_options方法 此控制器使用的所有序列化程序及其子代。
#users_controller.rb
class UsersController < ApplicationController
def default_serializer_options
{ include_addresses: false }
end
end
然后在订单序列化程序中覆盖初始化方法,以检查 include_addresses 标记的序列化程序选项:
# order_serializer.rb
class OrderSerializer < ActiveModel::Serializer
def initialize(object, options = {})
options.reverse_merge! include_addresses: true # by default it should include addresses
@include_addresses = options[:include_addresses]
super
end
def include_addresses?
@include_addresses
end
end
就是这样。在每个不需要嵌套地址的控制器中指定此选项。
答案 1 :(得分:0)
您可以从序列化程序中删除has_many
,它将停止包含关联。