我的问题与答案完全相同的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/