Skip to content

Unable to add custom relationships to avoid n+1 query problem #4

@khrisnagunanasurya-iav

Description

@khrisnagunanasurya-iav

Expected Behaviour

Only 1 SQL query will be executed

administrators = Administrator.eager_load(:permisi_roles)
administrators.first.permisi_roles.first  # Permisi::Backend::ActiveRecord::Actor
administrators.last.permisi_roles.first # Permisi::Backend::ActiveRecord::Actor

Actual Behavior

class Administrator < ApplicationRecord
  include Permisi::Actable

  has_one :permisi_actor, as: :aka, dependent: :destroy, class_name: "Permisi::Backend::ActiveRecord::Actor"
  has_many :permisi_actor_roles, through: :permisi_actor, source: :aka, source_type: "Administrator"
  has_many :permisi_roles, through: :permisi_actor_roles, source: :permisi_actor
...

when I tried to call #permisi_roles it return this

$ Administrator.first.permisi_roles
  Administrator Load (1.5ms)  SELECT "administrators".* FROM "administrators" ORDER BY "administrators"."id" ASC LIMIT $1  [["LIMIT", 1]]
  Permisi::Backend::ActiveRecord::Actor Load (2.1ms)  SELECT "permisi_actors".* FROM "permisi_actors" INNER JOIN "administrators" ON "permisi_actors"."aka_id" = "administrators"."id" INNER JOIN "permisi_actors" "permisi_actors_permisi_roles" ON "administrators"."id" = "permisi_actors_permisi_roles"."aka_id" WHERE "permisi_actors_permisi_roles"."aka_id" = $1 AND "permisi_actors_permisi_roles"."aka_type" = $2 AND "permisi_actors"."aka_type" = $3 AND "permisi_actors_permisi_roles"."aka_type" = $4  [["aka_id", 1], ["aka_type", "Administrator"], ["aka_type", "Administrator"], ["aka_type", "Administrator"]]
  [#<Permisi::Backend::ActiveRecord::Actor:0x00007f5b2004a290
  id: 1,
  aka_type: "Administrator",
  aka_id: 1,
  created_at: Mon, 16 Aug 2021 14:14:01.563540000 +07 +07:00,
  updated_at: Wed, 08 Sep 2021 16:45:21.564520000 +07 +07:00>]

In this case, it's returning the Permisi::Backend::ActiveRecord::Actor not Permisi::Backend::ActiveRecord::Role

Is there a built-in way to be able to do the same that I'm trying to achieve? Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is needed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions