2017-04-03 12 views
0

私の問題は、has_oneという多面的なテーブルから熱心な負荷レコードを必要とすることを除いて、答えが完全にhereと説明されているのとほとんど同じです。次のようにeager load 'has_one'のActiveRecord多相関連

私のモデルは以下のとおりです。

class VisionSource 
    has_one :entity_map, as: :entity_mappable 
end 

class EntityMap 
    belongs_to :entity_mappable, polymorphic: true 
end 

は、どのように私は、このようなEntityMap.includes(:entity_mappable)逐語的に何かを書くことができますか?

+0

おそらくあなたは[こちら](http://stackoverflow.com/questions/11909257/how-to-eager-load-a-polymorphic-答えを見つけることができますモデル) – alexunger

答えて

1

あなたのためにすぐに使えるはずです。私はEntityMappableを使用するクラスのカップルでこれを試してみましたが、上記が与える

EntityMap.includes(:entity_mappable).map(&:entity_mappable).map(&:class).map(&:name).uniq

:私はこれを試してみてください、あなたがEntityMappable

から何かを求めていないので、それは発射いないように見える疑いますレールコンソールでこの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) SELECT.* FROMWHERE. id` = 1

CameraShotモデルは、(それ自体を定義するので、タイプフィールド)STIを使用VisionSourceのサブクラスであることに留意されたい音に聞こえる音サウンドモデルが効果的に次のようになりながら、:

class Sound 
    has_one :entity_map, as: :entity_mappable 
end 
関連する問題