Techioz Blog

インスタンスメソッドからクラスメソッドにアクセスする方法

概要

私はモデルを持っています:

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)