假设我有两个模型:User和Point。
点属于用户。 Point有一个'金额'。我想在Point模型中定义一个返回用户总点数的方法。我想以这样的方式来称呼它:user.points.total
我只是不知道如何在Point模型中定义方法,以便我不必将其传递给用户的ID。我想有一个简单的方法可以做到这一点,但我的Googlefu让我失望。
答案 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