2017-05-23 4 views
0

ich ein einfaches Modell mit den folgenden Klassen:Entfernen Links mit JasonApi Ressourcen 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 

und die Ressourcen:

class CountryResource < JSONAPI::Resource 
    has_many :country_categories 
end 

Wenn ich eine GET Anfrage /countries/1?include=country_categories.category tun die Antwort bringt immer ein viele Links. Zum Beispiel

{ 
 
    "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" 
 
      } 
 
     } 
 
     } 
 
    } 
 
    ] 
 
}

Alle diese links werden nicht verwendet werden. Gibt es einen Weg, wie ich sie entfernen kann? Danke :)

+0

http://jsonapi-resources.com/v0.9/guide/serializer.html – max

+0

Danke, Max, aber das hilft mir nicht viel :) Ich habe bereits die Selbst Links ersetzt durch zwingende custom_links.self. Aber ich finde keinen Weg, das Gleiche für die Beziehungsverknüpfungen zu tun. – Tiago

Antwort

0

Die Lösung, die ich bis jetzt gefunden habe, war, den Resource Serializer mit einem Patch zu versehen (obwohl diese Lösung bei weitem nicht perfekt ist).

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 
Verwandte Themen