首页 > 解决方案 > JSON API 防止包含循环关系

问题描述

我有以下模型:

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

我遇到的问题是在包含的块中,它还返回重叠任务本身的重叠任务的关系。理想情况下,我只关心我获得的资源的重叠,并且只想对它进行一次查询(并跳过重叠重叠的查询)。

在字段[任务]中,我指定对于类型任务,我们将返回重叠任务,这导致包含块中的任务也返回重叠任务。如果包含块的资源类型与数据块相同,那么在 json-api 规范中是否有办法确定包含块的资源范围?

标签: ruby-on-railsjson-api

解决方案


推荐阅读