インスタンスメソッドからクラスメソッドにアクセスする方法
概要
私はモデルを持っています:
class UserWeight < ActiveRecord::Base
self.table_name = 'Weight'
scope :logged_between, lambda { |start_date, end_date|
where(weight_date: start_date.to_date...(end_date.to_date.end_of_day)) unless
start_date.nil? || end_date.nil?
}
# returns the sum of points
def total_points
self.class.Userweight
(UserWeight.blank?) ? 0 : UserWeight.inject(0) {|a, e| a + e.points}
end
end
コントローラ:
@weights = weight_usages.logged_between(params[:start_date], end_date)
重みで次のデータを取得します。
weights: [
{
weight: "170.0",
weight_date: "2016-12-28",
points: 1
},
{
weight: "185.0",
weight_date: "2017-01-04",
points: 1
}
.......
]
アクティブなレコードが配列のコレクションを返しています。クラスメソッドにアクセスして、インスタンスメソッドで合計を実行したいと考えています。データに基づいて、インスタンスメソッドから合計ポイント2を返したいと考えています。どうすればそれができるでしょうか?
ありがとう
解決策
total_points はインスタンス メソッドであるため、このメソッドはほとんど意味がないようですが、なぜすべてのレコードのポイントの合計をインスタンス メソッドで表示するのでしょうか?
上記の注意に加えて、ActiveRecord のメソッドを使用してください。合計を探しています:
UserWeight.sum(:points)
メソッド内:
self.class.sum(:points)