2012-07-18 73 views
6

我收到一個奇怪的錯誤。我的應用程序運行在我的本地完全正常的,但我的Heroku的服務器上它給這個錯誤:TypeError (String can't be coerced into Fixnum):TypeError(字符串不能強制轉換爲Fixnum)?

這裏是我的代碼:

@rep = rep_score(@u) 

根據這行引發錯誤日誌。我已經發表了評論,並將更改推向Heroku,現在應用運行良好。

這裏是rep_score方法:

def rep_score(user) 
rep = 0 
user.badges.each do |b| 
    rep = rep + b.rep_bonus 
end 
return rep 
end 

另外rep_bonus是數據庫中的一個整數。

再次,本地主機上運行得很好。讓我知道你的想法。


rep_score方法去除return後,它的正常工作。我對Ruby還是個新手,把return放在哪裏有什麼問題?這是其他語言的習慣。

回答

10

Ruby使用+作爲字符串和數學情境的組合工具。

簡單的解決方法:

def rep_score(user) 
rep = 0 
user.badges.each do |b| 
    rep = rep + b.rep_bonus.to_i 
end 
return rep 
end 

to_i正在改變rep_bonus,這可能是從數據庫模式,從一個字符串結果爲整數。你可以設置幾種不同的類型轉換。僅舉幾轉換:

  • 陣:to_a
  • 浮子:to_f
  • 整數:to_i
  • 字符串:to_s
+2

爲什麼我需要強制轉換的東西時,他們都是整數?這並沒有回答爲什麼它在本地主機上工作。 – Deekor 2012-07-18 15:56:26

+1

爲什麼是一個普遍的問題。我沒有確切的答案,但它解決了這個問題。我發現從我的數據庫中取出的整數並不總是被設置爲正確的類型。無論問題出在我的數據庫(我使用MySQL)上,我都不關心如何找到簡單的類型轉換來解決整個問題。 本地主機和生產是一個完全不同的環境。可能有數百萬的可能性。 Ruby版本不同,gem ports不一樣,平臺不同,數據庫版本不一樣......這個列表繼續下去,我還剩下40個字符來回答。 – CrazyVipa 2012-07-18 16:37:49

+0

如果你閱讀我的編輯,你可以看到我解決它之前,你回答這個問題擺脫'返回'。是否有返回導致錯誤的原因? – Deekor 2012-07-18 23:41:11