[go: up one dir, main page]

EachBatch module doesn't support eager loading polymorphic associations

There is currently a cop that guard against using ActiveRecord::Batches#in_batches and to favor the EachBatch#each_batch method. This method fails when we try to eager-load polymorphic association.

class Upload < ActiveRecord::Base
  include EachBatch
  ...
end

> Upload.includes(:model).each_batch(of: 1, &:count)
ActiveModel::MissingAttributeError: missing attribute: model_type

> Upload.includes(:model).in_batches(of: 1, &:count)
(0.3ms)  SELECT  "uploads"."id" FROM "uploads"  ORDER BY "uploads"."id" ASC LIMIT 1
  Upload Load (0.1ms)  SELECT "uploads".* FROM "uploads" WHERE "uploads"."id" = 166
  Snippet Load (0.3ms)  SELECT "snippets".* FROM "snippets" WHERE "snippets"."id" IN (56)
   (0.3ms)  SELECT  "uploads"."id" FROM "uploads" WHERE ("uploads"."id" > 166)  ORDER BY "uploads"."id" ASC LIMIT 1
  Upload Load (0.2ms)  SELECT "uploads".* FROM "uploads" WHERE "uploads"."id" = 167
  Namespace Load (0.2ms)  SELECT "namespaces".* FROM "namespaces" WHERE "namespaces"."id" IN (4)
   (0.2ms)  SELECT  "uploads"."id" FROM "uploads" WHERE ("uploads"."id" > 167)  ORDER BY "uploads"."id" ASC LIMIT 1
  Upload Load (0.2ms)  SELECT "uploads".* FROM "uploads" WHERE "uploads"."id" = 168
  Project Load (0.3ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" IN (1)
   (0.3ms)  SELECT  "uploads"."id" FROM "uploads" WHERE ("uploads"."id" > 168)  ORDER BY "uploads"."id" ASC LIMIT 1
  Upload Load (0.3ms)  SELECT "uploads".* FROM "uploads" WHERE "uploads"."id" = 169
  Project Load (0.4ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" IN (35)
   (0.2ms)  SELECT  "uploads"."id" FROM "uploads" WHERE ("uploads"."id" > 169)  ORDER BY "uploads"."id" ASC LIMIT 1
  Upload Load (0.3ms)  SELECT "uploads".* FROM "uploads" WHERE "uploads"."id" = 170
  Project Load (0.3ms)  SELECT "projects".* FROM "projects" WHERE "projects"."id" IN (36)
   (0.2ms)  SELECT  "uploads"."id" FROM "uploads" WHERE ("uploads"."id" > 170)  ORDER BY "uploads"."id" ASC LIMIT 1

I think this should be supported.

Edited by 🤖 GitLab Bot 🤖