使用 JasonApi 资源删除链接 Gem

Removing links using JasonApi Resources Gem

我有一个简单的模型 类:

class Country < ApplicationRecord
  has_many :country_categories
  has_many :categories, through: :country_categories
end

class CountryCategory < ApplicationRecord
  belongs_to :country
  belongs_to :category
end

class Category < ApplicationRecord
  has_many :country_categories
  has_many :countries, through: :country_categories
end

和资源:

class CountryResource < JSONAPI::Resource
  has_many :country_categories
 end

当我向 /countries/1?include=country_categories.category 发出 GET 请求时,响应总是会带来很多链接。例如

{
  "data": {
    "id": "31",
    "type": "countries",
    "attributes": {
      "description": null
    },
    "relationships": {
      "country-categories": {
        "links": {
          "self": "http://api.localhost.local:3000/api/v1/countries/31/relationships/country-categories",
          "related": "http://api.localhost.local:3000/api/v1/countries/31/country-categories"
        },
        "data": [
          {
            "type": "country-categories",
            "id": "129"
          },
          {
            "type": "country-categories",
            "id": "130"
          }
        ]
      },
    }
  },
  "included": [
    {
      "id": "129",
      "type": "country-categories",
      "attributes": {
        "stuff": "aaa"
      },
      "relationships": {
        "country-subcategories": {
          "links": {
            "self": "http://api.localhost.local:3000/api/v1/country-categories/129/relationships/country-subcategories",
            "related": "http://api.localhost.local:3000/api/v1/country-categories/129/country-subcategories"
          }
        },
        "category": {
          "links": {
            "self": "http://api.localhost.local:3000/api/v1/country-categories/129/relationships/category",
            "related": "http://api.localhost.local:3000/api/v1/country-categories/129/category"
          },
          "data": {
            "type": "categories",
            "id": "1"
          }
        }
      }
    },
    {
      "id": "130",
      "type": "country-categories",
      "attributes": {
        "stuff": "sfasf"
      },
      "relationships": {
        "country-subcategories": {
          "links": {
            "self": "http://api.localhost.local:3000/api/v1/country-categories/130/relationships/country-subcategories",
            "related": "http://api.localhost.local:3000/api/v1/country-categories/130/country-subcategories"
          }
        },
        "category": {
          "links": {
            "self": "http://api.localhost.local:3000/api/v1/country-categories/130/relationships/category",
            "related": "http://api.localhost.local:3000/api/v1/country-categories/130/category"
          },
          "data": {
            "type": "categories",
            "id": "3"
          }
        }
      }
    },
    {
      "id": "1",
      "type": "categories",
      "links": {
        "self": "http://api.localhost.local:3000/api/v1/categories/1"
      },
      "attributes": {
        "name": "Value extraction"
      },
      "relationships": {
        "subcategories": {
          "links": {
            "self": "http://api.localhost.local:3000/api/v1/categories/1/relationships/subcategories",
            "related": "http://api.localhost.local:3000/api/v1/categories/1/subcategories"
          }
        }
      }
    },
    {
      "id": "3",
      "type": "categories",
      "links": {
        "self": "http://api.localhost.local:3000/api/v1/categories/3"
      },
      "attributes": {
        "name": "Enabling environment"
      },
      "relationships": {
        "subcategories": {
          "links": {
            "self": "http://api.localhost.local:3000/api/v1/categories/3/relationships/subcategories",
            "related": "http://api.localhost.local:3000/api/v1/categories/3/subcategories"
          }
        }
      }
    }
  ]
}

所有这些 links 都不会被使用。有什么办法可以删除它们吗? 谢谢:)

到目前为止我找到的解决方案是猴子修补资源序列化程序(尽管这个解决方案远非完美)。

module JSONAPI
  class ResourceSerializer

    def link_object_to_many(source, relationship, include_linkage)
  include_linkage = include_linkage | relationship.always_include_linkage_data
      link_object_hash = {}
      link_object_hash[:links] = {} if relationship.always_include_linkage_data
      link_object_hash[:links][:self] = self_link(source, relationship) if relationship.always_include_linkage_data
      link_object_hash[:links][:related] = related_link(source, relationship) if relationship.always_include_linkage_data
      link_object_hash[:data] = to_many_linkage(source, relationship) if include_linkage
      link_object_hash
    end

    def link_object_to_one(source, relationship, include_linkage)
      include_linkage = include_linkage | @always_include_to_one_linkage_data | relationship.always_include_linkage_data
      link_object_hash = {}
      link_object_hash[:links] = {} if relationship.always_include_linkage_data
      link_object_hash[:links][:self] = self_link(source, relationship) if relationship.always_include_linkage_data
      link_object_hash[:links][:related] = related_link(source, relationship) if relationship.always_include_linkage_data
      link_object_hash[:data] = to_one_linkage(source, relationship) if include_linkage
      link_object_hash
    end
  end
end