Skip to content

bug with polymorphic relationship #982

@senid231

Description

@senid231

when primary_key is changed on resource level id mismatch between relatioship linkage and included data.
Reproduced in bug report template according to PR #980 proposal

Models

class Storage < ActiveRecord::Base
  has_one :keeper, class_name: 'Keeper', as: :keepable
end

class Keeper < ActiveRecord::Base
  belongs_to :keepable, polymorphic: true
end

resources

class StorageResource < JSONAPI::Resource
  model_name 'Storage'
  key_type :string
  primary_key :token

  attribute :name
end

class KeeperResource < JSONAPI::Resource
  model_name 'Keeper'
  has_one :keepable, polymorphic: true

  attribute :name
end

class KeepableResource < JSONAPI::Resource
end

Data

storage = Storage.create! name: 'Warehouse 1', token: 'some-token'
Keeper.create! name: 'John Doe', keepable: storage

Response

{
  "data": {
    "id": "1",
    "type": "keepers",
    "links": {
      "self": "http://example.org/keepers/1"
    },
    "attributes": {
      "name": "John Doe"
    },
    "relationships": {
      "keepable": {
        "links": {
          "self": "http://example.org/keepers/1/relationships/keepable",
          "related": "http://example.org/keepers/1/keepable"
        },
        "data": {
          "type": "storages",
          "id": "1"
        }
      }
    }
  },
  "included": [
    {
      "id": "some-token",
      "type": "storages",
      "links": {
        "self": "http://example.org/storages/some-token"
      },
      "attributes": {
        "name": "Warehouse 1"
      }
    }
  ]
}

as you see included data for storages has "id: "some-token", but keepable relationship linkage has "id": "1"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions