Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails模型中的自参考_Ruby On Rails_Ruby - Fatal编程技术网

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`。你知道为什么吗?对不起,我没有仔细阅读你的评论。由于您要求在
内调用一个方法,因此需要通过
的实例来调用该方法。如果您希望通过
用户
的实例来调用它,那么另一个答案就是您想要的。