🪲
【Activeadmin】bulletのActiveStorageのeager_load検出を解決した方法
起きたこと
Activeadmin で、has_one_attached で画像を関連付けて持っているモデルの index を開いた際、以下の eager load が detect された
user: root
GET /admin/model_name
USE eager loading detected
ActiveStorage::Attachment => [:blob]
Call stack
前提
環境
- Rails 6.1.3
- Ruby 3.0.1
- bullet 6.1.4
モデル
class ModelName < ApplicationRecord
has_one_attached :image1
has_one_attached :image2
end
解決法
activeadmin の該当ファイルに以下を追記(app/admin/●●.rb
)
controller do
def scoped_collection
super.eager_load(image1_attachment: :blob, image2_attachment: :blob)
end
end
activeadmin でない場合も、
.eager_load(image1_attachment: :blob, image2_attachment: :blob)
をクエリに追加すれば動くと思います。
参考
Bullet の issue
ホワイトリストに指定して該当の検出を無効にする手法が紹介されていましたが自分の環境では動きませんでした。
解決に繋がった記事
この記事に載っていたのはincludes
でしたが、そのままだと変化がなかったのでeager_load
に変更したところ問題が解決しました。
Discussion