急切加载ActiveRecord多态关联,这些关联是' has_one'

时间:2017-04-03 23:38:24

标签: mysql ruby-on-rails activerecord ruby-on-rails-5

我的问题与完全解释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)一样逐字写一些东西?

1 个答案:

答案 0 :(得分: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 {1}} ID为. {vision_sources {1}} {位置{1}} {声音{1}} {声音{1}} {声音{1}} id` = 1

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

IN (89, 87, 88, 90, 85, 86) ORDER BY