如何在集合(活动模型序列化程序)中对关联的属性进行分组

时间:2017-01-31 15:12:05

标签: ruby-on-rails-5 active-model-serializers

考虑以下两个实体:帖子,作者

null

使用'JSON'适配器,对于PostsController的索引操作,我们得到如下响应:

class PostSerializer < ActiveModel::Serializer
  attributes :id, :title, author_id
  belongs_to :author
end

Class AuthorSerializer < ActiveModel::Serializer
  attributes :id, :name
end

是否可以将作者数据分组到帖子数据之外进行侧载? (如下图所示)

{
  "posts":[
    {
      "id":1,
      "title":"Hic consectetur et delectus",
      "author_id": 1,
      "author":{"id":1,"name":"Author-A"}
    },
    {
      "id":2,
      "title":"Hic consectetur et delectus",
      "author_id": 2,
      "author":{"id":2,"name":"Author-B"}
    },
    {
      "id":3,
      "title":"Hic consectetur et delectus",
      "author_id": 1,
      "author":{"id":1,"name":"Author-A"}
    }
  ]
}

2 个答案:

答案 0 :(得分:0)

好像你想模仿jsonapi包含的关系。所以,w json适配器,post有一个属性,为了保持简单,author_id,然后,你将作者与作者分开渲染并生成响应,或者你将它们混合并减少它们。您可能只能呈现为[帖子,作者]!

答案 1 :(得分:0)

作为一种解决方法,我们创建了一个自定义适配器,用于扩展Json适配器并在serializable_hash(...)方法中将哈希修改为所需格式

class CustomAdapter < ActiveModelSerializers::Adapter::Json
  def serializable_hash(options = nil)
    result_hash = super(options)
    ... code to modify hash format ...
    result_hash
  end
end