【问题标题】:eager load ActiveRecord polymorphic associations that are 'has_one'急切加载“has_one”的 ActiveRecord 多态关联
【发布时间】:2017-08-28 23:48:25
【问题描述】:
我的问题与通过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)这样的逐字记录?
【问题讨论】:
标签:
mysql
ruby-on-rails
activerecord
ruby-on-rails-5
【解决方案1】:
应该为您开箱即用。我怀疑它看起来没有触发,因为您没有从 EntityMappable 中要求某些东西
试试这个:
EntityMap.includes(:entity_mappable).map(&:entity_mappable).map(&:class).map(&:name).uniq
我尝试了几个使用 EntityMappable 的类,上面在 rails 控制台中给出了这个 SQL 输出:
EntityMap Load (0.9ms) SELECT entity_maps .* FROM entity_maps ORDER BY entity_maps .位置ASC
CameraShot Load (0.4ms) SELECT vision_sources .* FROM vision_sources WHERE vision_sources .键入IN ('CameraShot') AND vision_sources . ID IN (89, 87, 88, 90, 85, 86) ORDER BY vision_sources .位置ASC
Sound Load (0.3ms) SELECTsounds.* FROMsoundsWHEREsounds.id` = 1
请注意,CameraShot 模型是 VisionSource 的子类,它使用 STI(因此使用类型字段来定义自身),而 Sound 模型实际上如下所示:
class Sound
has_one :entity_map, as: :entity_mappable
end