Ruby on rails Rails模型中的自参考
假设我有两个模型:用户模型和点模型 点属于用户。点有一个“数量”。我想在点模型中定义一个方法,该方法将返回用户的总分。我想这样称呼它:Ruby on rails Rails模型中的自参考,ruby-on-rails,ruby,Ruby On Rails,Ruby,假设我有两个模型:用户模型和点模型 点属于用户。点有一个“数量”。我想在点模型中定义一个方法,该方法将返回用户的总分。我想这样称呼它:user.points.total 我只是不知道如何在点模型中定义方法,这样我就不必向它传递用户ID。我想有一种简单的方法可以做到这一点,但我的Google Fu让我失望了。假设用户模型 has_many :points 您可以在用户模型中这样做 def total_points points.sum(:amount) end 假设用户模型 has_m
user.points.total
我只是不知道如何在点模型中定义方法,这样我就不必向它传递用户ID。我想有一种简单的方法可以做到这一点,但我的Google Fu让我失望了。假设用户模型
has_many :points
您可以在用户模型中这样做
def total_points
points.sum(:amount)
end
假设用户模型
has_many :points
您可以在用户模型中这样做
def total_points
points.sum(:amount)
end
考虑到您希望在
点
模型中定义方法,您希望使用:
class Point
def total
user.points.sum(:amount)
end
end
然后,您可以通过调用
point.total
获取与给定点关联的用户的总分。您无法通过User.points.total
获取总分,因为User
是一个类,不引用特定用户。如果您想要在Point
模型中定义的方法,您需要使用:
class Point
def total
user.points.sum(:amount)
end
end
然后,您可以通过调用point.total
获取与给定点关联的用户的总分。您无法通过User.points.total
获取总分,因为User
是一个类,不引用特定用户。请考虑使用,它使用SQL sum进行聚合
比如说,
person.points.sum('amount')
或
考虑使用,它使用SQL sum进行聚合
比如说,
person.points.sum('amount')
或
这是我的第一直觉,但我更愿意像User.points.total
那样引用它,而不是User.total
。谢谢你@我认为user.total_points
没有什么错,但是你可以用它完成你想要的,这是我的第一本能,但我宁愿像user.points.total
那样引用它,而不是user.total
。谢谢你@Thessiz我认为user.total_points没有错,但是你可以通过感谢@Peter完成你想要的。使用此方法,我在尝试使用whateveruser.points.total调用它时遇到以下错误:undefined method
total',for[]:ActiveRecord::Relation`。你知道为什么吗?对不起,我没有仔细阅读你的评论。由于您要求在点
中使用方法,因此需要通过点
的实例调用此方法。如果您希望通过用户
的实例调用此方法,那么另一个答案就是您想要的。谢谢@Peter。使用此方法,我在尝试使用whateveruser.points.total调用它时遇到以下错误:undefined method
total',for[]:ActiveRecord::Relation`。你知道为什么吗?对不起,我没有仔细阅读你的评论。由于您要求在点
内调用一个方法,因此需要通过点
的实例来调用该方法。如果您希望通过用户
的实例来调用它,那么另一个答案就是您想要的。