Похоже, вы пытаетесь вызвать метод экземпляра на вашем классе типа, не ваш класс экземпляр. Это ваш код прямо сейчас:
class FitbitAccount
...
def steps
@response = self.class.get("https://#{@@base_uri}/#{@user_id}/activities/steps/date/today/1d/1min.json",
:headers => @authorization_header)
@parsed_response = MultiJson.load(@response.body)
@parsed_response = @parsed_response["activities-steps"][0]["value"].to_i
end
def full_report
# Full Report
puts "Full Report:\n-------"
puts "#{self.class.steps} steps"
puts "#{self.class.distance} miles"
puts "#{self.class.floors} stairs climbed"
puts "#{self.class.cals_out} calories burned"
end
end
self.class
возвращает FitbitAccount
типа и не относится к текущему объекту класса. Поскольку ваши методы в настоящее время являются методами экземпляра, то есть вам нужно назначить объект FitbitAccount.new
, прежде чем вы сможете их использовать, вы получаете NoMethodError. Чтобы исправить эту ошибку, можно заменить все self.class
заявления с просто self
в вашем FitbitAccount
классе, например, так:
class FitbitAccount
...
def steps
@response = self.get("https://#{@@base_uri}/#{@user_id}/activities/steps/date/today/1d/1min.json",
:headers => @authorization_header)
@parsed_response = MultiJson.load(@response.body)
@parsed_response = @parsed_response["activities-steps"][0]["value"].to_i
end
def full_report
# Full Report
puts "Full Report:\n-------"
puts "#{self.steps} steps"
puts "#{self.distance} miles"
puts "#{self.floors} stairs climbed"
puts "#{self.cals_out} calories burned"
end
end
Если вы хотите ваш текущий код, чтобы работать, вы можете сделать ваши методы класса метод вместо instance, добавив ключевое слово self
перед именем метода. Вот пример:
class FitbitAccount
...
def self.steps
@response = self.class.get("https://#{@@base_uri}/#{@user_id}/activities/steps/date/today/1d/1min.json",
:headers => @authorization_header)
@parsed_response = MultiJson.load(@response.body)
@parsed_response = @parsed_response["activities-steps"][0]["value"].to_i
end
def self.full_report
# Full Report
puts "Full Report:\n-------"
puts "#{self.class.steps} steps"
puts "#{self.class.distance} miles"
puts "#{self.class.floors} stairs climbed"
puts "#{self.class.cals_out} calories burned"
end
end
Я не советовал бы вам, чтобы сделать их методы класса, хотя, потому что тогда они не будут привязаны к конкретному экземпляру, и кажется, что вы хотите, чтобы иметь возможность создать несколько экземпляров FitbitAccount
,
Представьте MCVE. И в самом вопросе. –
Я не уверен, но я думаю, что вы вызываете метод 'steps' в классе' FitbitAccount', но метод 'steps' не является методом класса. –