ruby-on-rails – 与Active Model Serializer相关的负载关联

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 与Active Model Serializer相关的负载关联前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
背景

我有一个具有深度嵌套关联的rails应用程序.

  1. .-< WorkPeriod
  2. Timecard -< Week -< Day -<--< Subtotal
  3. `-< Adjustment
  4.  
  5. -< (has many)

我正在使用Active Model Serializer来构建API.

在客户端,我想加载一个时间卡,一次就是关联.

目前我的串行器看起来像这样,

  1. class TimecardSerializer < ActiveModel::Serializer
  2. embed :ids,include: true
  3. has_many :weeks
  4. end
  5. class WeekSerializer < ActiveModel::Serializer
  6. embed :ids,include: true
  7. has_many :days
  8. end
  9. # ... etc ...

问题

这一切都可以找到,除了没有什么是渴望的.所以它最终会为每个请求调用数据库.对于每周,它会对该周的日子单独提出申请.而对于每一天,它都是单独的请求,它的工作周期,小计和调整.

解决方法

一个解决方案是在TimecardSerializer上定义自己的周方法.从那里你可以包括()你想要加载的所有关联.
  1. class TimecardSerializer < ActiveModel::Serializer
  2. embed :ids,include: true
  3. has_many :weeks
  4.  
  5. def weeks
  6. object.weeks.includes(days: [:sub_totals,:work_periods,:adjustments])
  7. end
  8. end

所有查询仍将显示在日志中,但大多数查询将是一个缓存的查询,而不是真实的查询.

猜你在找的Ruby相关文章