ruby-on-rails - 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 规范中是否有办法确定包含块的资源范围?
解决方案
推荐阅读
- flutter - 缺少(state.build)的具体实现(插入到 sqflite)
- c# - 有没有办法通过 shareName 获取 Xamarin.Essentials.Preferences
- python - 简单循环python“for”?
- c# - 如何在html表asp.net mvc中显示组数据
- hybris - 在 Java 中使用 ConfigurationServices() 读取动态值
- html - 输入元素,“文本”类型,标签中没有文本
- swift - 从 RoundedRectangle 到 Circle 的 SwiftUI 缩放效果
- node.js - EJS部署客户端渲染
- regex - 使用 REGEX 忽略特定单词后需要文本
- java - Dockerfile testcontainers 无法连接到 Ryuk