Reputation: 1268
Getting the following error when trying to call a private method inside the same class:
undefined local variable or method
a_private_method' for AClass (NameError)`
Here the class:
class AClass
def self.public_method
file = a_private_method
end
private
def a_private_method
do something
end
end
Upvotes: 1
Views: 2064
Reputation: 2187
You are trying to call an instance method from a class method, this does of course not work.
Try this
class AClass
class << self
def public_method
file = a_private_method
end
private
def a_private_method
# do something
end
end
end
You can also use self
as the receiver similar to what you already did but pleases be aware that moving the method to the private
part of your class does not work in this case. You could use private_class_method
though.
class AClass
def self.public_method
file = a_private_method
end
def self.a_private_method
# do something
end
private_class_method :a_private_method
end
end
See https://jakeyesbeck.com/2016/01/24/ruby-private-class-methods and https://dev.to/adamlombard/ruby-class-methods-vs-instance-methods-4aje.
Upvotes: 8