gpt4 book ai didi

mysql - 急切加载 ActiveRecord 多态关联为 'has_one'

转载 作者:行者123 更新时间:2023-11-29 10:54:42 25 4
gpt4 key购买 nike

我的问题与彻底解释的答案几乎相同here ,除了我需要立即加载多态表中 has_one 的记录。

我的模型如下:

class VisionSource 
has_one :entity_map, as: :entity_mappable
end

class EntityMap
belongs_to :entity_mappable, polymorphic: true
end

我怎样才能逐字编写这样的内容EntityMap.includes(:entity_mappable)

最佳答案

应该开箱即用。我怀疑它看起来没有触发,因为您没有向 EntityMappable 请求某些东西

试试这个:

EntityMap.includes(:entity_mappable).map(&:entity_mappable).map(&:class).map(&:name).uniq

我尝试了几个使用EntityMappable的类,上面在rails控制台中给出了这个SQL输出:

EntityMap 加载 (0.9ms) SELECTentity_maps.* FROMentity_mapsORDER BYentity_maps.positionASC
CameraShot 加载(0.4 毫秒) SELECT
vision_sources.* FROMvision_sourcesWHEREvision_sources.typeIN ('CameraShot') ANDvision_sources.idIN (89, 87, 88, 90, 85, 86) ORDER BYvision_sources.positionASC
声音负载 (0.3ms) SELECT
sounds.* FROMsoundsWHEREsounds.id` = 1

请注意,CameraShot 模型是 VisionSource 的子类,它使用 STI(因此使用类型字段来定义自身),而 Sound 模型实际上如下所示:

class Sound
has_one :entity_map, as: :entity_mappable
end

关于mysql - 急切加载 ActiveRecord 多态关联为 'has_one',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43196019/

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