执行此操作时,为什么我会变空? Asumming用户的观点是2500.它应该返回83
posts_controller
@user = User.find(params[:id])
@user.percentage = count_percentage(@user)
@user.save
application_controller
def count_percentage(user)
if user
if user.point > 2999
percentage = ((user.point / 5000.0) * 100 ).to_i
elsif user.point > 1999
percentage = ((user.point / 3000.0) * 100 ).to_i
end
return percentage
end
end
答案 0 :(得分:2)
看起来有一些缺乏基本的理解,所以我试着在这里关注几点。
count_percentage
属于您的模型。这是一种与您的User
记录相关联的方法。在您的示例中,代码只能与User
记录一起使用。因此它属于您的User
类!
class User < ActiveRecord::Base
def percentage
if self.point > 2999
return ((self.point / 5000.0) * 100 ).to_i
elsif user.point > 1999
return ((self.point / 3000.0) * 100 ).to_i
else
# personally, I'd add a case for points range 0...3000
end
end
正如您所说,您希望将该值放入“侧边菜单”中,这样就可以在@user.percentage
处为您提供所需的百分比。
根据您的描述(如果我理解正确的方法),您希望将计算值存储在用户模型中。我们再来一次:模型逻辑属于您的模型类。如果您想让百分比值保持最新,您可以添加回调,例如:
class User < ActiveRecord::Base
before_save :store_percentage
def precentage
# your code here
end
private
def store_percentage
self.my_percentage_field_from_my_database = self.percentage
end
end
对于您的实际问题:user.point
可能是NULL
(db)/ nil
(ruby),因此您应该在实际计算之前将其转换为to_i
。这就是为什么我建议在你的情况下else
阻止;要返回一个值,你的user.point
是否大于1999
(如果它甚至是一个整数...在这种情况下我怀疑)。
答案 1 :(得分:1)
要回答这个问题,您应该尝试检查user.point
方法中的percentage
,count_percentage
值。
我强烈推荐pry。因为它太棒了。