gpt4 book ai didi

ruby-on-rails - 与主动模型序列化程序的急切加载关联

转载 作者:行者123 更新时间:2023-12-03 22:17:00 25 4
gpt4 key购买 nike

背景

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

                          .-< WorkPeriod
Timecard -< Week -< Day -<--< Subtotal
`-< Adjustment

-< (has many)

我正在使用 Active Model Serializer构建 API。

在客户端,我想一次性加载考勤卡及其所有关联。

目前我的序列化程序看起来像这样,

class TimecardSerializer < ActiveModel::Serializer
embed :ids, include: true
has_many :weeks
end
class WeekSerializer < ActiveModel::Serializer
embed :ids, include: true
has_many :days
end
# ... etc ...

问题

这一切都可以找到,除了没有任何东西被急切加载。因此,它最终会为每个请求对数据库进行大量调用。对于每一周,它会针对该周的天数发出单独的请求。并且对于每一天,它都会单独请求它的 work_periods、小计和调整。

最佳答案

一种解决方案是定义您自己的 weeks TimecardSerializer 上的方法。从那里你可以.includes()您想要急切加载的所有关联。

class TimecardSerializer < ActiveModel::Serializer
embed :ids, include: true
has_many :weeks

def weeks
object.weeks.includes(days: [:sub_totals, :work_periods, :adjustments])
end
end

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

关于ruby-on-rails - 与主动模型序列化程序的急切加载关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18134649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com