【问题标题】:active_model_serializers, includes, and why a serializer is querying data?active_model_serializers,包含,以及为什么序列化程序正在查询数据?
【发布时间】:2018-10-18 17:40:50
【问题描述】:

在使用 API 时,我习惯于:

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

现在,使用 active_model_serializers,我假设在

render json: artist, include: 'tracks'

如果我的艺术家有一些曲目,include: 'tracks' 部分将序列化 tracks

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

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

【问题讨论】:

    标签: ruby-on-rails ruby active-model-serializers json-api


    【解决方案1】:

    是的,要包含一个关联,它首先必须从数据库中获取。否则怎么可能包含在响应中?

    请参阅json serializer documentation

    关联被它对应的方法调用。在您的示例中,这将是 Artist#tracks。 (参见source code。)这意味着如果您在调用序列化程序之前加载关联,它将不会调用数据库。

    例子:

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

    【讨论】:

    • 好的,所以在 Rails 中:serilalize = serialize + query missing data from db 对吧?
    • 是的。唯一的选择是: 1. 引发由于缺少数据而无法呈现的错误。 2. 在相关对象上设置错误并返回 false 作为结果(如 ActiveRecord::Base)。但是我的答案中的实现是 Rails 开发人员使用的地方。
    猜你喜欢
    • 2020-08-11
    • 2020-04-15
    • 1970-01-01
    • 2016-12-22
    • 2019-08-19
    • 2016-07-16
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    相关资源
    最近更新 更多