Mark
Mark

Reputation: 6455

Ruby - referencing another class inside a self.method

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

Answers (1)

Eric Duminil
Eric Duminil

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 :

Upvotes: 2

Related Questions