停止活动模型序列化程序嵌套数据gem
我正在使用活动模型序列化程序gem,它现在可以正常工作。然而,我却偶然发现了一个问题,我不想停止检索数据的嵌套。停止活动模型序列化程序嵌套数据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来处理订单中的地址。
是唯一选择为两个选项创建单独的序列化程序(它只是不觉得非常干)?
您可以使用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
就是这样。在每个不需要地址嵌套的控制器中指定此选项。
您可以从序列化程序中删除has_many
,它将停止包含关联。
对不起,这个问题不是很精确。我希望在查询订单时为地址提供has_many,为此我需要返回地址。 – Dofs 2014-09-27 07:33:38
你能澄清你想要的吗?你写了'我现在有一个用户控制器,我不想要命令,但不是嵌套的地址。这可以在不创建一个全新的串行器类的情况下完成吗?'这不完全清楚。 – 2014-09-26 23:33:38
我曾经这样做过,我的解决方案可能适用于您。请粘贴您的代码示例,以便我可以发布我的答案。 – Benj 2014-09-27 06:20:18