【发布时间】:2020-03-20 23:10:05
【问题描述】:
所以我已经为此苦苦挣扎了几个小时,希望有人能提供帮助。
我有 3 级关系,列表、页面和应用程序。
列表 has_many Pages
一个 Page belongs_to List 并且可以选择 belongs_to 一个 App。
应用 has_many Pages
这样的查询
@account.lists.includes(pages: :app)
一切正常,我没有 N+1 个查询,并且所有这些都被正确加载
例如
List Load (3.0ms) SELECT `lists`.* FROM `rotations` WHERE `lists`.`account_id` = 1
Page Load (2.5ms) SELECT `pages`.* FROM `pages` WHERE `pages`.`list_id` IN (13, 17, 18)
App Load (2.0ms) SELECT `apps`.* FROM `apps` WHERE `apps`.`id` IN (6, 9, 15)
我的问题是所有这些语句都是SELECT * FROM,尽管特别是应用程序记录非常重。一个名为“内容”的列中可以有整个 HTML 文档
我真的只需要SELECT apps.id, apps.name FROMapps ....`。所以我没有将这些完整的对象加载到内存中,只是稍后我只渲染 ID 和名称时将其全部丢弃。
我会手动执行此操作,尽管我似乎无法使用 ActiveModelSerializers 进行此操作。
我的序列化器非常标准。一个拥有_many :pages 的列表和一个属于_to :app 的页面。
如何仅从我的嵌套关联之一中提取选择属性?我很确定我可以使用joins(),但我不确定它如何与我的序列化程序一起使用?
干杯
【问题讨论】:
标签: ruby-on-rails ruby active-model-serializers