为什么我在执行这个时会变空?用户点求和为 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
一些基本的理解,所以我在这里尝试关注几点。
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
(红宝石),因此您应该在实际使用它进行计算之前将其to_i
转换。这也是为什么我建议在你的病情中else
块;要返回一个值,无论是否,您的user.point
都大于1999
(如果它甚至是一个整数......在这种情况下我对此表示怀疑)。
要回答这个问题,你应该尝试检查user.point
,percentage
count_percentage
方法中的值。
我强烈建议撬开。因为它很棒。