首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让fast_jsonapi返回关系的属性

如何让fast_jsonapi返回关系的属性
EN

Stack Overflow用户
提问于 2019-04-21 18:49:51
回答 3查看 7.9K关注 0票数 7

我有一个包含许多模型的rails api,这些模型正在被fast_jsonapi gem序列化。

这是我的模型的样子:

代码语言:javascript
复制
class Shift < ApplicationRecord
  belongs_to :team, optional: true
  ...
代码语言:javascript
复制
class Team < ApplicationRecord
  has_many :shifts
  ...

这是序列化程序的样子。

代码语言:javascript
复制
class ShiftSerializer
  include FastJsonapi::ObjectSerializer
  ...
  belongs_to :team
  ...
end

序列化可以正常工作。然而,尽管我包含了复合团队文档:

代码语言:javascript
复制
def index
  shifts = policy_scope(Shift).includes(:team)
  options = {}
  options[:include] = [:team, :'team.name', :'team.color']
  render json: ShiftSerializer.new(shifts, options)
end

我仍然将对象设置为这样的格式:

代码语言:javascript
复制
...
relationships: {
  team: {
    data: {
      id: "22",
      type: "Team"
    }
  }
}

而我希望也能得到我的团队模型的属性。

EN

回答 3

Stack Overflow用户

发布于 2019-04-21 19:22:59

fast_jsonapi实现了json api specification,因此respond包含"included“键,其中放置了关系的序列化数据。这是默认行为

票数 4
EN

Stack Overflow用户

发布于 2020-01-23 14:45:07

如果使用options[:include],则应该为包含的模型创建序列化程序,并自定义响应中包含的内容。

在您的情况下,如果您使用

代码语言:javascript
复制
ShiftSerializer.new(shifts, include: [:team]).serializable_hash

您应该创建一个新的序列化程序serializers/team_serializer.rb

代码语言:javascript
复制
class TeamSerializer
  include FastJsonapi::ObjectSerializer

  attributes :name, :color
end

这样,您的响应将是

代码语言:javascript
复制
{
  data: [
    {
      id: 1,
      type: "shift",
      relationships: {
        team: {
          data: {
            id: "22",
            type: "Team"
          }
        }
      }
    }
  ],
  included: [
    id: 22,
    type: "Team",
    attributes: {
       name: "example",
       color: "red"
    }
  ]
}

您将在响应"included"中找到您的关联的自定义数据

票数 1
EN

Stack Overflow用户

发布于 2020-05-08 16:00:42

如果你这样使用,也许你的问题就解决了。

代码语言:javascript
复制
class Shift < ApplicationRecord
    belongs_to :team, optional:true
    accepts_nested_attributes_for :team
end 

在您的ShiftSerializer.rb中的

请编写此代码,

代码语言:javascript
复制
attribute :team do |object|
    object.team.as_json
end

,您将获得所需的自定义数据。

参考:https://github.com/Netflix/fast_jsonapi/issues/160#issuecomment-379727174

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55782066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档