我的问题与答案完全相同的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 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 . position 声音ASC Sound Load (0.3ms) SELECT声音.* FROM声音WHERE id` = 1

请注意,CameraShot模型是VisionSource的子类,它使用STI(因此使用type字段定义自身),而Sound模型实际上看起来像这样:

class Sound
  has_one :entity_map, as: :entity_mappable
end

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

10-10 16:51