Reputation: 6455
I've 2 classes, Person and Membership. Membership has a method called individual_ids which returns an array of ID's, and I'd like to retrieve people with an ID in that array:
class Membership
def self.individuals
where(membershipable_type: 'individual')
end
def self.individuals_ids
individuals.pluck(:membershipable_id)
end
end
class Person
def self.individuals
Person.where(id: Membership.individuals_ids)
end
end
When I attempt to run Person.individuals, I'm told:
NameError: uninitialized constant Person::Membership
How do I reference the Membership class from inside a self method call as above, rather than it thinking I mean Person.Membership?
Thanks!
Upvotes: 2
Views: 128
Reputation: 54303
Your code works fine when both classes are in the same file. Membership
class is found by Person
class :
class Membership
def self.individuals
puts "Membership.individuals"
end
def self.individuals_ids
puts "Membership.individuals_ids"
end
end
class Person
def self.individuals
puts "Person.individuals"
Membership.individuals_ids
end
end
Person.individuals
#=> Person.individuals
#=> Membership.individuals_ids
It means your Membership
class isn't autoloaded by Rails. You can make sure that Membership
is defined in membership.rb
and either :
membership.rb
to app
folderconfig.autoload_paths
Upvotes: 2