它看起來像你試圖調用你的類的實例方法類型,而不是你的類實例。這是現在你的代碼:
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
如果你想你目前的代碼工作,你可以讓你的方法類方法,而不是實例方法通過在方法名稱前添加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。在問題本身。 –
我不太確定,但我認爲你正在調用'FitbitAccount'類的方法'steps',但'steps'方法不是類方法。 –