Rails 关于多态嵌套关联的 active_model_serializers

2024-02-25

设置 gem 后,我尝试获取深层嵌套的多态关联数据。

但 gem 只渲染 1 级关联数据。

序列化器

class CommentsSerializer < ActiveModel::Serializer
  attributes :id, :title, :body, :user_id, :parent_id, :commentable_id, :commentable_type

  belongs_to :user
  belongs_to :commentable, :polymorphic => true
end

经过一番研究

在 active_model_serializers github 文档页面上

我已经尝试过这个解决方案,但也没有成功

has_many :commentable

def commentable
  commentable = []
  object.commentable.each do |comment|
    commentable << { body: comment.body }
  end
end

请有人可以就这个问题提供提示吗?

对于一些我应该使用的

ActiveModel::Serializer.config.default_includes = '**'

我也已经尝试过这个配置

下面的屏幕截图说明了这种情况

此评论有很多可评论的回复,但仅呈现一个。我想发表此评论的其余评论。


您需要正确定义序列化器,并小心不要递归地渲染所有内容。我设置了这两个模型:

class Post < ApplicationRecord
  has_many :comments, as: :commentable
end

class Comment < ApplicationRecord
  belongs_to :commentable, polymorphic: true
end

这些序列化器:

class CommentSerializer < ActiveModel::Serializer
  attributes :id, :body

  belongs_to :commentable, serializer: CommentableSerializer
end

class CommentableSerializer < ActiveModel::Serializer
  attributes :id, :body

  has_many :comments, serializer: ShallowCommentSerializer
end

class ShallowCommentSerializer < ActiveModel::Serializer
  attributes :id, :body
end

您需要另一个序列化程序来处理帖子的所有评论,以便评论不会尝试呈现帖子,而帖子会尝试呈现评论等......

保持你的

ActiveModel::Serializer.config.default_includes = '**'

配置选项已打开。

Calling http://localhost:3000/comments/1 yields:

{
  "id": 1,
  "body": "comment",
  "commentable": {
    "id": 1,
    "body": "post",
    "comments": [
      {
        "id": 1,
        "body": "comment"
      },
      {
        "id": 2,
        "body": "Reply comment"
      }
    ]
  }
}

我相信,这就是您想要实现的目标。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 关于多态嵌套关联的 active_model_serializers 的相关文章

随机推荐

  • 无法启动mongos

    我正在尝试设置简单的分片 在没有任何副本集的单个主机上 但是我无法继续下去 因为当我尝试启动 mongos 时会发生这种情况 C gt mongos configdb localhost 27010 port 27011 I get Bad
  • android:使用ActivityGroup嵌入活动

    我正处于构建应用程序的概念化 设计阶段 但遇到了一些障碍 本质上 我正在寻找一种将一个活动嵌入到另一个活动的 UI 中的方法 类似于 TabHost TabActivity 的方式 屏幕顶部将有一个窗口 其中包含其他活动 其下方将是独立于上
  • 如何在Azure中托管的React应用程序中使用环境变量

    我对 React 还很陌生 并且总体上也在探索 Azure 我有 ERP 背景 但该背景确实包括使用 VSTS 和 CI CD 等工具 我非常依赖使用 VSTS 中的 库 来指定每个环境的变量 然后在部署时指定这些变量 但 我一直在互联网上
  • Bash 变量格式

    关于使用 BASH 编写脚本 以下变量之间有什么区别 var var var var 之间没有区别 var and var 之间没有区别 var and var 但在某些情况下 当您使用以前的版本时 解析器可能无法识别您的意图 考虑 foo
  • xpath:有没有办法获取xpath中所有孩子的文本

    我在 Firefox 上使用 xpath 引擎 我有html span b prefix one b not bold part span span prefix two not bold part span 我想要所有的span具有以 前
  • Excel 滚动条不允许屏幕更新,除非您“放下”滚动条

    希望这很简单 但经过一个小时的在线搜索后 我找不到其他人抱怨这个问题 也许我只是还没有找到合适的措辞来描述它 我的公司最近切换到 Excel 2016 我讨厌滚动条的工作方式 如果您用鼠标拖动滚动条 当前视图将冻结在适当的位置 直到您 放下
  • 根据使用 python 的字符串经验转换为年数[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一列数据如下 9年3个月22天 如何将其转换为 9 3 12 22 365 9 31 我想要输出为 9 31 如何在 python 中做
  • .NET 中的 PHP htmlspecialcharacters 等效吗?

    PHP 有一个很棒的函数 叫做html 特殊字符 https www php net manual en function htmlspecialchars php当你向它传递一个字符串时 它会用它们的安全等价物替换所有 HTML 特殊字符
  • 将 WiX UI 迁移到 Burn

    我有一个可用的 WiX 安装程序 带有使用 WixUI Mondo MyApp wxs 文件的自定义 UI 我必须扩展我的安装程序才能运行另一个 exe 安装程序 我知道 Burn 是实现此目的的方法 我创建了一个 Burn 项目 将我的原
  • jquery移动页面闪烁

    页面加载后和执行 listview refresh 时页面闪烁 所以在转换之后会出现闪烁 friendsList append data listview refresh 我得到了闪烁 尝试添加 EDIT 刷新列表视图时 我理解列表视图内的
  • 为什么从 AngularJS 控制器内部加载时 google graph 不起作用。浏览器变白,控制台中没有任何错误

    这样 当我像在页面加载期间一样加载它时 我的直方图就可以正常工作 document ready x new Array 10 for var i 0 i lt 10 i x i new Array 2 x i 0 txt x i 1 100
  • WordPress:如何通过自定义分类在作者页面中显示帖子计数

    我正在尝试使用计数器在作者页面中显示自定义分类 但似乎我不知道该怎么做 我有一个代码函数 php add action pre get posts function q if is admin q gt is main query q gt
  • Sitecore + Lucene 搜索 FieldQuery 带空字符串

    我正在使用 FieldQuery 对象创建 Sitecore Ecommerce Search Query 然后 我使用 LuceneQueryBuilder 类将 Sitecore 查询转换为 Lucene Net Search Quer
  • django excel xlwt

    在 django 网站上 我想根据数据库中的一些数据生成一个 excel 文件 我正在考虑使用xlwt http pypi python org pypi xlwt 但它只有一个将数据保存到文件的方法 如何获取文件到 HttpRespons
  • 在 VBA 中填充一行

    我试图找出如何填充 或复制 一行 lastUsedRow 直到最后一行 然而 我发现自己在指定范围方面遇到了困难 特别是因为我正在处理具有不同大小的不同数据集 Before 我需要找出lastUsedRow lastUsedRow Rang
  • 从哪里获取这个丢失的文件 - Android Studio、模拟器

    升级我的 android studio 后 我尝试创建一个模拟器 但在尝试启动 AVD 时出现此错误 Emulator statvfs home nompumelelo android avd Pixel 2 API 24 avd snap
  • 玩框架2 ebean @manytoone 列指定两次

    我遇到了 ebean 的一些问题 使用 play Framework 2 版本 2 2 1 我有两节课 我的图表类 public class Graph extends Model Id Column name id private Str
  • List.IndexOf() 与 List.FindIndex() 的效率

    采用哪一种方法 List
  • 如何在不同分支中为 Django ROOT_URLCONF 设置设置正确的值

    我已经把创建的站点目录放在django admin startproject在版本控制 Mercurial 下 假设该网站名为frobnicator 现在我想做一些认真的重构 所以我使用命令克隆站点 hg clone frobnicator
  • Rails 关于多态嵌套关联的 active_model_serializers

    设置 gem 后 我尝试获取深层嵌套的多态关联数据 但 gem 只渲染 1 级关联数据 序列化器 class CommentsSerializer lt ActiveModel Serializer attributes id title