active_model_serializers, включает, а почему сериализатор запрашивает данные? - PullRequest
0 голосов
/ 08 мая 2018

При работе с API я привык:

  1. выполнить некоторые запросы к БД
  2. выберите данные, которые я хочу в моем ответе
  3. сериализует данные и отправляет их клиенту

Теперь , используя active_model_serializers , я предполагал, что в

render json: artist, include: 'tracks'

партия include: 'tracks' сериализовала бы tracks, если бы у моего исполнителя было несколько треков.

Но, по-видимому, он также будет извлекать треки из БД для меня.

Это нормальное поведение ? Предполагается ли, что сериализатор выполняет запросы к БД?

1 Ответ

0 голосов
/ 08 мая 2018

Да, чтобы включить ассоциацию, ее сначала нужно получить из базы данных. Иначе как его можно включить в ответ?

См. Документацию по json сериализатору .

Ассоциация вызывается соответствующим методом. В вашем примере это будет Artist # дорожки . (См. Исходный код .) Это означает, что если вы загрузите ассоциацию перед вызовом сериализатора, она не будет вызывать базу данных.

Пример:

artist = Artist.first # <= artists table gets queried
artist.tracks.load # <= tracks table gets queried
render json: artist, include: :tracks # <= no queries
...