Skip to content

Instantly share code, notes, and snippets.

@pduersteler
Forked from anonymous/controller
Created October 9, 2013 19:18
Show Gist options
  • Save pduersteler/6906667 to your computer and use it in GitHub Desktop.
Save pduersteler/6906667 to your computer and use it in GitHub Desktop.
# Aim: load all activities having the same customer.
#
# PublicActivity::Activity(id: integer, trackable_id: integer, trackable_type: string, ...)
# => belongs_to :trackable, polymorphic: true
# => trackable is either Project or Service
PublicActivity::Activity.joins(:trackable)
# ActiveRecord::EagerLoadPolymorphicError: Can not eagerly load the polymorphic association :trackable
PublicActivity::Activity.includes(:trackable)
# PublicActivity::Activity Load (0.3ms) SELECT "activities".* FROM "activities"
# Project Load (0.2ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" IN (1)
# Mandate Load (0.2ms) SELECT "mandates".* FROM "mandates" WHERE "mandates"."id" IN (1)
PublicActivity::Activity.includes(trackable: :customer)
# PublicActivity::Activity Load (0.3ms) SELECT "activities".* FROM "activities"
# Project Load (0.3ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" IN (1)
# Mandate Load (0.3ms) SELECT "mandates".* FROM "mandates" WHERE "mandates"."id" IN (1)
# Customer Load (0.4ms) SELECT "customers".* FROM "customers" WHERE "customers"."id" IN (1)
# Customer Load (0.4ms) SELECT "customers".* FROM "customers" WHERE "customers"."id" IN (1)
PublicActivity::Activity.includes(trackable: :customer).where('customers.id = 1').references(:customers)
# ActiveRecord::EagerLoadPolymorphicError: Can not eagerly load the polymorphic association :trackable
class Customer < ActiveRecord::Base
has_many :projects
has_many :services
end
class Project < ActiveRecord::Base
include PublicActivity::Common
belongs_to :customer
end
class Service < ActiveRecord::Base
include PublicActivity::Common
belongs_to :customer
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment