User と Point の 2 つのモデルがあるとします。
ポイントはユーザーに属しています。ポイントには「金額」があります。ユーザーの合計ポイントを返す Point モデルのメソッドを定義したいと考えています。私はそれを次のように呼びたいと思います:user.points.total
ユーザーのIDを渡す必要がないように、Pointモデルでメソッドを定義する方法がわかりません。これを行う簡単な方法があると思いますが、私のGooglefuは失敗しています。
User と Point の 2 つのモデルがあるとします。
ポイントはユーザーに属しています。ポイントには「金額」があります。ユーザーの合計ポイントを返す Point モデルのメソッドを定義したいと考えています。私はそれを次のように呼びたいと思います:user.points.total
ユーザーのIDを渡す必要がないように、Pointモデルでメソッドを定義する方法がわかりません。これを行う簡単な方法があると思いますが、私の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
SQL sum を使用して集計を行う#sumの使用を検討してください。
例えば、
person.points.sum('amount')
また
# inside User.rb
def total
points.sum('amount')
end