gpt4 book ai didi

ruby-on-rails - ActiveModel::Serializer 可以像 Rails Controller 那样具有命名空间名称(嵌套)吗?

转载 作者:行者123 更新时间:2023-12-04 06:18:10 24 4
gpt4 key购买 nike

问题:

我用我的 Controller 这样做:

class Api::Product::V1::LicenseController < ApplicationController

为什么我不能用我的序列化器做到这一点? (或者我可以吗?)
class Api::Product::V1::LicenseSerializer < ActiveModel::Serializer

语境:

我有多个 Controller /路由对应于一个模型。

而且我需要每个模型有多个序列化器,它们与我的 Controller 一一对应。
ActiveModel::Serializers允许您从 Controller 指定序列化程序,如下所示:
render :json => @license_token, :serializer => LicenseSerializer

那么为什么我也不能这样做呢?
render :json => @license_token, :serializer => Api::Product::V1::LicenseSerializer

我试图避免像这样的复合名称的丑陋,即使我知道它们会起作用:
  • ProductAlphaLicenseSerializer
  • ProductBravoLicenseSerializer
  • ProductCharlieLicenseSerializer

  • 我的每个模型都支持多个 API,这就是我想要命名序列化程序的原因。每个对应的序列化程序以不同的方式使用每个模型。

    最佳答案

    如果您解释您遇到的错误(如果有),可能会有所帮助。我对 Active Model Serializers 也有类似的担忧,根据文档,AMS 似乎只会在 app/serializers 中执行自动序列化器查找。基于模型类的路径,因此命名空间 Controller 与序列化程序查找无关。

    似乎没有任何东西可以阻止您手动指定任何您想要的序列化程序类,实际上是在命名空间 Controller 中使用 LicenseSerializer应该在模块 Api::Product::V1 中寻找命名空间类默认情况下。您是否尝试过在适当的命名空间下组织您的序列化程序,以便 rails 类加载将自动解析它们?例如,把 Api::Product::V1::LicenceSerializerapp/serializers/api/product/v1/license_serializer.rb ?

    您可能还想查看 roar-rails gem它与 rails 集成并使用与 ruby​​ web 框架无关的 ROAR gem,它支持使用表示模式的两种方式 JSON/XML/JSON+HAL 处理。请注意,您不会像 jbuilder/jsonify 那样控制序列化,但是如果您正在查看 AMS,我猜您希望从细节上有所提升。使用 ROAR,您将获得基于您选择的表示器格式的统一 API,并且更接近真正的超媒体 API。

    代表/ROAR 方法的一些基本原理here , herehere .

    编辑 : 你也可以考虑我的to_json执行。所有当前 JSON 序列化程序库的性能和灵 active 是我项目中的一个重要问题。在尝试了所有替代方案后,我最终开发了一个干净的 JSON DSL 并与 Oj 合作。作者开发了一个高性能的字符串缓冲区/流编码 API。我的 to_json gem 在预算托管服务器上每秒轻松序列化 18,000 个复杂对象,并且对可以生成的 JSON 结构没有限制。

    关于ruby-on-rails - ActiveModel::Serializer 可以像 Rails Controller 那样具有命名空间名称(嵌套)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19129527/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com