加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 20:12:02 所属栏目:百科 来源:网络整理
导读:背景 我有一个具有深度嵌套关联的rails应用程序. .- WorkPeriodTimecard - Week - Day --- Subtotal `- Adjustment- (has many) 我正在使用Active Model Serializer来构建API. 在客户端,我想加载一个时间卡,一次就是关联. 目前我的串行器看起来像这样, class
背景

我有一个具有深度嵌套关联的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 ...

问题

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

解决方法

一个解决方案是在TimecardSerializer上定义自己的周方法.从那里你可以包括()你想要加载的所有关联.
class TimecardSerializer < ActiveModel::Serializer
  embed :ids,include: true
  has_many :weeks

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读