У меня есть следующая модель:
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 охватить ресурс включенного блока, если он того же типа, что и блок данных?