Ruby on rails 与活动模型序列化程序的即时加载关联 背景
我有一个具有深层嵌套关联的rails应用程序Ruby on rails 与活动模型序列化程序的即时加载关联 背景,ruby-on-rails,performance,associations,eager-loading,active-model-serializers,Ruby On Rails,Performance,Associations,Eager Loading,Active Model Serializers,我有一个具有深层嵌套关联的rails应用程序 .-< WorkPeriod Timecard -< Week -< Day -<--< Subtotal `-< Adjustment -< (has many) -
.-< WorkPeriod
Timecard -< Week -< Day -<--< Subtotal
`-< Adjustment
-< (has many)
- Timecard-weeks
方法。从那里可以.includes()
加载所有要加载的关联
class TimecardSerializer
所有查询仍将显示在日志中,但大多数查询将是缓存查询,而不是真实查询。我也遇到过类似问题。我把它固定在我的控制器上。我喜欢将它放在序列化程序中的想法,但将它放在控制器中也会抓住ArraySerializer造成的n+1周问题
Timecard.find(params[:id]).includes(weeks: [{ days: [:sub_totals, :work_periods, :adjustments] }])
及
现在应该立即加载,并将查询限制为仅六个db命中。这对于加载单个资源很好,但如果使用此序列化程序返回
时间卡的列表,则将不起作用。特别是,weeks
不会被急切地加载,尽管weeks
关联会被加载。您不能在实例上调用include,您应该执行Timecard。其中(id:params[:id])包括(…)
Timecard.includes(weeks: [{ days: [:sub_totals, :work_periods, :adjustments] }])