2012-07-18 70 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