Rails 6.1 急切加载 ActiveStorage::VariantRecord

4

我一直在使用 eager loading 加载ActiveStorage附件,具体如下:

Journey.includes(created_by_user: [profile_picture_attachment: :blob])

我们一直在使用 variant,自从升级到 Rails 6.1 并启用在数据库中跟踪 Active Storage variants后,我们发现日志中有一个循环的 n+1 查询,如下所示:

Journey.includes(created_by_user: [profile_picture_attachment: :blob]).each do |j|
 j.created_by_user.profile_picture.variant(resize_to_fill: [32, 32]).processed
end

Journey Load (0.8ms)  SELECT "journeys".* FROM "journeys"
  User Load (0.7ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1  [["id", 607]]
  ActiveStorage::Attachment Load (0.6ms)  SELECT "active_storage_attachments".* FROM "active_storage_attachments" WHERE "active_storage_attachments"."record_type" = $1 AND "active_storage_attachments"."name" = $2 AND "active_storage_attachments"."record_id" = $3  [["record_type", "User"], ["name", "profile_picture"], ["record_id", 607]]
  ActiveStorage::Blob Load (0.6ms)  SELECT "active_storage_blobs".* FROM "active_storage_blobs" WHERE "active_storage_blobs"."id" = $1  [["id", 144]]
  ActiveStorage::VariantRecord Load (0.5ms)  SELECT "active_storage_variant_records".* FROM "active_storage_variant_records" WHERE "active_storage_variant_records"."blob_id" = $1 AND "active_storage_variant_records"."variation_digest" = $2 LIMIT $3  [["blob_id", 144], ["variation_digest", "k9S9jJS87DbFgXD1sW9j5XkOr1c="], ["LIMIT", 1]]
  ActiveStorage::VariantRecord Load (0.5ms)  SELECT "active_storage_variant_records".* FROM "active_storage_variant_records" WHERE "active_storage_variant_records"."blob_id" = $1 AND "active_storage_variant_records"."variation_digest" = $2 LIMIT $3  [["blob_id", 144], ["variation_digest", "k9S9jJS87DbFgXD1sW9j5XkOr1c="], ["LIMIT", 1]]
  ActiveStorage::VariantRecord Load (0.5ms)  SELECT "active_storage_variant_records".* FROM "active_storage_variant_records" WHERE "active_storage_variant_records"."blob_id" = $1 AND "active_storage_variant_records"."variation_digest" = $2 LIMIT $3  [["blob_id", 144], ["variation_digest", "k9S9jJS87DbFgXD1sW9j5XkOr1c="], ["LIMIT", 1]]
  ActiveStorage::VariantRecord Load (0.5ms)  SELECT "active_storage_variant_records".* FROM "active_storage_variant_records" WHERE "active_storage_variant_records"."blob_id" = $1 AND "active_storage_variant_records"."variation_digest" = $2 LIMIT $3  [["blob_id", 144], ["variation_digest", "k9S9jJS87DbFgXD1sW9j5XkOr1c="], ["LIMIT", 1]]
  ActiveStorage::VariantRecord Load (0.5ms)  SELECT "active_storage_variant_records".* FROM "active_storage_variant_records" WHERE "active_storage_variant_records"."blob_id" = $1 AND "active_storage_variant_records"."variation_digest" = $2 LIMIT $3  [["blob_id", 144], ["variation_digest", "k9S9jJS87DbFgXD1sW9j5XkOr1c="], ["LIMIT", 1]]

我尝试使用以下内容进行急切加载,但似乎并不起作用:
Journey.includes(created_by_user: [profile_picture_attachment: { blob: :variant_records }])

有人尝试过急切加载已跟踪的变体记录来分享你的想法吗?

1个回答

4

with_all_variant_records:包括所有变量记录with_attached_(image/video/file/...):附带(图片/视频/文件/...) - Dorian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接