【问题标题】: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)这样的逐字记录?

【问题讨论】:

  • 或许你能找到答案here

标签: 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

【讨论】:

    猜你喜欢
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多