Ruby on Rails - 为什么此应用程序控制器不会向调用的控制器返回正确的值?



为什么我在执行这个时会变空?用户点求和为 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.pointpercentage count_percentage方法中的值。

我强烈建议撬开。因为它很棒。

相关内容

  • 没有找到相关文章

最新更新