JSON API предотвращает включение круговых отношений - PullRequest
0 голосов
/ 01 мая 2019

У меня есть следующая модель:

class Task < ActiveRecord::Base
   def overlapping_tasks
     # call a query to return the list of overlapping_tasks of type Task based on dates
  end
end

class TaskSerializer < ActiveModel::Serializer
  attributes \
    :name

    has_many :overlapping_tasks, serializer: TaskSerializer
end

JSON API вызывается со следующими полями и включает в себя.

/tasks/1/fields[tasks]=name,overlapping_tasks,&include=overlapping_tasks

{ 
  data: 
  {"id"=>"1",
   "type"=>"tasks",
   "attributes"=>
    {
     "name"=>"Task 1",
     "start_date"=>"2012-01-01"
     "end_date"=>"2012-12-12",
    },
   "relationships"=>
    {"overlapping_tasks"=>
      {"data"=>[{"id"=>"2", "type"=>"tasks"}]}},
   "links"=>{"self"=>"/tasks/1"}}
  },
  "included": 
  { 
     [{"id"=>"2",
    "type"=>"tasks",
    "attributes"=>
       {"name"=>"Task 2",
        "start_date"=>"2012-01-01",
         "end_date"=>"2012-12-12",
      },
      "relationships"=>
          {"overlapping_tasks"=>
              {"data"=>[{"id"=>"1", "type"=>"tasks"}]}},
      "links"=>{"self"=>"/tasks/2"}}]
  }
}

Проблема у меня во включенном блоке, он также возвращает отношения для overlapping_tasks самой перекрывающейся задачи. И в идеале, я бы заботился только о перекрытии получаемого ресурса и хотел бы просто сделать для него один запрос (и пропустить запрос на перекрытие перекрытия).

В полях [tasks] я указываю, что для задач типа мы будем возвращать overlapping_tasks, поэтому задача во включенном блоке также будет возвращать overlapping_tasks. Есть ли способ в спецификации json-api охватить ресурс включенного блока, если он того же типа, что и блок данных?

...