JSONAPI Active Model Serializer没有将模型关系与它自己的对象分离,因为规范描述了

时间:2017-01-31 07:47:42

标签: active-model-serializers rails-api json-api

我正在根据我发现的教程构建rails应用程序,并尝试使用JSONAPI Active Model Serializer生成该格式的响应。

在初始化程序中,我已经提出:

ActiveModelSerializers.config.adapter = :json_api

在我的gemfile中:

gem 'active_model_serializers', '~> 0.10.0.rc3'

根据json-api规范,我期待两个资源级别的密钥,数据和关系。但是,并没有将关系分离出来与自己的对象分离。这是我对/ contacts的要求。

{
  "data": [
    {
      "id": "1",
      "type": "contacts",
      "attributes": {
        "family-name": "La",
        "given-names": "ch",
        "company": {
          "id": 1,
          "name": "Lorem Inc",
          "phone": "+1 (415) 555-1234",
          "email": "office@lorem.inc",
          "website": "www.lorem.inc",
          "address": "213 Main St. 94063 San Francisco, CA",
          "customer_id": "10001",
          "additional_info": "",
          "created_at": "2017-01-31T05:47:02.024Z",
          "updated_at": "2017-01-31T05:47:02.024Z"
        },
        "title": null,
        "phone": null,
        "email": null,
        "website": null,
        "address": null,
        "customer-id": null,
        "additional-info": null
      }
    }
  ]
}

公司是联系人的belongs_to。这是我的序列化器。

class CompanySerializer < ActiveModel::Serializer
  attributes :id, :name, :phone, :email, :website, :address, :customer_id, :additional_info
end

class ContactSerializer < ActiveModel::Serializer
  attributes :id, :family_name, :given_names, :company, :title, :phone, :email, :website, :address, :customer_id, :additional_info
end

这些是我的模特:

class Contact < ApplicationRecord
  belongs_to :company

  validates :family_name, presence: true
  validates :given_names, presence: true
end

class Company < ApplicationRecord
  validates :name, presence: true
end

其他所有内容都只是来自rails cli的默认生成代码。我不确定我还需要在这里添加什么,因为我理解默认的rails行为是生成一个响应,它将显示序列化程序中的所有内容。我假设jsonapi适配器应该为我分开。

我还需要做些什么才能让jsonapi适配器正常工作?

1 个答案:

答案 0 :(得分:0)

我在序列化程序中缺少关系!

也在x post

中回答

https://github.com/rails-api/active_model_serializers/issues/2044