You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Grape API中加载关联资源?(基于ActiveModelSerializers 0.10)

解决ActiveModelSerializers 0.10中include关联不生成included数组的问题

我之前在使用AMS 0.10时也碰到过一模一样的问题!只拿到关联关系但没有included数组,核心原因是AMS默认的适配器不支持这种JSON API风格的嵌套输出,得做几个关键调整:

  • 第一步:确保序列化器正确声明关联
    首先检查你的RegionSerializer有没有明确定义courts关联,比如:

    class RegionSerializer < ActiveModel::Serializer
      attributes :id, :name
      # 声明has_many关联,若有自定义CourtSerializer也可以指定
      has_many :courts, serializer: CourtSerializer
    end
    

    如果没声明这个关联,AMS根本不知道要序列化对应的关联数据。

  • 第二步:启用JSON API适配器
    AMS 0.10默认用的是Attributes适配器,这种适配器只会把关联ID放在响应里,不会生成included数组。要切换到JsonApi适配器,有两种方式:

    1. 全局配置(在config/initializers/active_model_serializers.rb中添加):
      ActiveModelSerializers.config.adapter = :json_api
      
    2. 局部临时指定(在控制器/present调用时):
      present region, include: ['courts'], adapter: :json_api, with: RegionSerializer
      
  • 第三步:确保请求格式符合JSON API规范
    要么在请求头里设置Accept: application/vnd.api+json,要么在渲染时明确指定格式,这样AMS才会按照JSON API的结构输出included数组。

做完这些调整后,你再调用present region, include: ['courts'](或者带适配器参数的版本),就能同时拿到关联关系和包含完整关联数据的included数组了。

内容的提问来源于stack exchange,提问作者andrefurquin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:22:55