假设我有两个模型:用户和点。
点belongs_to 用户。点有一个“数量”。我想在 Point 模型中定义一个返回用户总分的方法。我想这样称呼它:user.points.total
我只是不知道如何在 Point 模型中定义方法,这样我就不必将用户 ID 传递给它。我想有一种简单的方法可以做到这一点,但我的 Googlefu 让我失望了。
假设我有两个模型:用户和点。
点belongs_to 用户。点有一个“数量”。我想在 Point 模型中定义一个返回用户总分的方法。我想这样称呼它:user.points.total
我只是不知道如何在 Point 模型中定义方法,这样我就不必将用户 ID 传递给它。我想有一种简单的方法可以做到这一点,但我的 Googlefu 让我失望了。
假设用户模型有
has_many :points
你可以在用户模型中这样做
def total_points
points.sum(:amount)
end
鉴于您想要Point
模型中定义的方法,您希望使用:
class Point
def total
user.points.sum(:amount)
end
end
point
然后,您可以通过调用来获取与给定关联的用户的总分point.total
。您无法获得总分,User.points.total
因为User
它是一个类并且不涉及特定用户。
考虑使用#sum,它使用 SQL sum 进行聚合。
例如,
person.points.sum('amount')
或者
# inside User.rb
def total
points.sum('amount')
end