TypeError(String不能被强制转换为Fixnum)?

时间:2012-07-18 06:25:05

标签: ruby-on-rails-3 heroku

我遇到了一个奇怪的错误。我的应用程序在我的本地主机上运行完全正常,但在我的Heroku服务器上它发出此错误:TypeError (String can't be coerced into 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也是数据库中的整数。

再次,这在localhost上运行得非常好。让我知道你的想法。


return方法移除rep_score后,它正常运行。我还是Ruby新手,放return有什么问题吗?这是其他语言的习惯。

1 个答案:

答案 0 :(得分: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
  • Float:to_f
  • 整数:to_i
  • 字符串:to_s