假設我有兩個模型:User和Point。Rails模型中的自引用
Point belongs_to用戶。點有'金額'。我想在Point模型中定義一個返回用戶總分的方法。我想這樣調用它:user.points.total
我只是不知道如何在Point模型中定義方法,以便我不必將它傳遞給用戶的ID。我可以想象有一個簡單的方法可以做到這一點,但我的Googlefu正在讓我失望。
假設我有兩個模型:User和Point。Rails模型中的自引用
Point belongs_to用戶。點有'金額'。我想在Point模型中定義一個返回用戶總分的方法。我想這樣調用它:user.points.total
我只是不知道如何在Point模型中定義方法,以便我不必將它傳遞給用戶的ID。我可以想象有一個簡單的方法可以做到這一點,但我的Googlefu正在讓我失望。
假設用戶模型
has_many :points
,你可以做這樣的假設要在Point
模型中定義的方法,用戶模型
def total_points
points.sum(:amount)
end
,你想使用:
class Point
def total
user.points.sum(:amount)
end
end
然後,您可以獲得與ag關聯的用戶的總積分iven point
,通過調用point.total
。您無法通過User.points.total
獲得總積分,因爲User
是一個班級,並且不涉及特定用戶。
來完成你想要的。謝謝@Peter。使用這種方法,我收到以下錯誤,試圖使用whateveruser.points.total調用它:'[:ActiveRecord :: Relation']未定義的方法'total'。任何想法爲什麼會這樣? – opticon
你能分享導致錯誤的代碼嗎? –
對不起,我沒有仔細閱讀你的評論。既然你在'Point'中要求一個方法,你需要通過'Point'的一個實例來調用它。 –
考慮使用#sum,它使用SQL sum進行聚合。
例如,
person.points.sum('amount')
或
# inside User.rb
def total
points.sum('amount')
end
那是我的第一本能,但我寧願引用它像'User.points.total'而不是'User.total'。雖然謝謝! – opticon
@TheSciz我看到'user.total_points'沒有錯,但你可以用[Association Extension](http://guides.rubyonrails.org/association_basics.html#association-extensions) – rubish