Rails模型中的自引用

时间:2013-08-20 02:13:55

标签: ruby-on-rails ruby

假设我有两个模型:User和Point。

点属于用户。 Point有一个'金额'。我想在Point模型中定义一个返回用户总点数的方法。我想以这样的方式来称呼它:user.points.total

我只是不知道如何在Point模型中定义方法,以便我不必将其传递给用户的ID。我想有一个简单的方法可以做到这一点,但我的Googlefu让我失望。

3 个答案:

答案 0 :(得分:3)

假设用户模型有

has_many :points

您可以在用户模型中执行此操作

def total_points
    points.sum(:amount)
end

答案 1 :(得分:0)

鉴于您需要Point模型中定义的方法,您需要使用:

class Point
  def total
    user.points.sum(:amount)
  end
end

然后,您可以通过调用point获取与给定point.total相关联的用户的总积分。您无法通过User.points.total获得总分,因为User是一个类,而不是指特定用户。

答案 2 :(得分:0)

考虑使用#sum,它使用SQL sum进行聚合。

例如,

person.points.sum('amount')

# inside User.rb
def total
  points.sum('amount')
end