繁体   English   中英

active_model_serializers(包括),以及为什么序列化程序正在查询数据?

[英]active_model_serializers, includes, and why a serializer is querying data?

使用API​​时,我习惯于:

  1. 执行一些数据库查询
  2. 选择我要在回复中提供的数据
  3. 序列化数据,并将其发送给客户端

现在 ,使用active_model_serializers ,我假设

render json: artist, include: 'tracks'

include: 'tracks'部分将序列化tracks (如果我的艺术家有曲目)。

但显然,它也将为我从数据库中获取曲目。

这是正常现象吗? 序列化程序是否应该进行数据库查询?

是的,要包含一个关联,首先必须从数据库中获取它。 否则如何将其包含在响应中?

请参阅json序列化器文档

关联是通过其相应的方法调用的。 在您的示例中,将是Artist#tracks (请参阅源代码 。) 这意味着,如果在调用序列化程序之前加载了关联,则不会调用数据库。

例:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM