タイトル通り、かなりハマったので事象をメモしておく。
事象
タイトル通りですが、strict_loading!
をしてeager_loading
を強制しているPolymorphic関連を持つモデルから、
関連を辿ると本来であればActiveRecord::StrictLoadingViolationError
が発生すると思うのですが、
以下の通りArgumentError
が発生します。
ArgumentError: Polymorphic associations do not support computing the class. activerecord-7.0.2.3/lib/active_record/reflection.rb:417:in `compute_class' activerecord-7.0.2.3/lib/active_record/reflection.rb:376:in `klass' activerecord-7.0.2.3/lib/active_record/core.rb:241:in `strict_loading_violation!' activerecord-7.0.2.3/lib/active_record/associations/association.rb:220:in `find_target' activerecord-7.0.2.3/lib/active_record/associations/singular_association.rb:44:in `find_target' activerecord-7.0.2.3/lib/active_record/associations/association.rb:173:in `load_target' activerecord-7.0.2.3/lib/active_record/associations/association.rb:67:in `reload' activerecord-7.0.2.3/lib/active_record/associations/singular_association.rb:11:in `reader' activerecord-7.0.2.3/lib/active_record/associations/builder/association.rb:104:in `target' active_record_gem.rb:46:in `test_strict_loading_to_Polymorphic_model'
再現コードはこちら
解決策
とりあえずstrict_loading!(false)
して、strict_loadingを無効化してあげれば例外発生自体は防げるのですが、ArgumentError
になるのは謎ですね。。。
※ strict_loadingってPolymorphic associationに対応していない?
おわりに
strict_loadingとPolymorphic associationの掛け合わせなので、あんまりハマることも少ないかもですが。。。Rails難しい。。。 strict_loading使ってたけど、まだ本番利用してるところは少ないのかも?
2022/04/17追記
issueあげてみました
2022/05/07追記
対応版のPRがマージされて7.0 stableにバックポートされそうなので次回リリースで修正されそうです🙏✨