Edited at

Rails selfの使い道

More than 3 years have passed since last update.

railsを勉強中にselfというのが出てきて、

どうにも理解できず改めて勉強してみたのでまとめる。


selfの定義の仕方

selfをつけるとクラスメソッドが定義できます。

class User

#クラスメソッド
def self.classHoge
end

#インスタンスメソッド
def instanceHoge
end
end

このような形でselfを頭に着けると定義できる。

class User

class << self
#クラスメソッド
def classHoge
end
end

#インスタンスメソッド
def instanceHoge
end
end

こんな書き方もOK。


selfの使い方

#クラスメソッド

User.classHoge

#インスタンスメソッド
User.new.instanceHoge

newしなくて使えるのがクラスメソッド


結局何が違うの?

ここから先は、まだ検証できたわけではないですが、

こんなことなのかな?と思っていることです。

誤りあればご指摘ください。。。

クラスメソッドは例えばUserクラス全体からなんらかの条件に合致するUserを取得する時に使うと良い。

インスタンスメソッドは任意のUserオブジェクトからさらになんらかの条件に合致するUserを取得する時に使うと良い。

こんな使い方できるかな?と思っていること。

クラスメソッドでUserクラス全体から任意のUserを取得する。

(例えば、25歳以下のUserを取得するとか。)

そこからなんらかの処理を施した後、取得したUserオブジェクトの内、

男性のみを取得したいなどがあれば、selfを組み合わせてうまいことメソッドが組めるのでは?


イメージ

class User < ActiveRecord::Base

def self.getYoungUser
#25歳以下のユーザを取得する処理
end

def getMaleUser
#インスタンスから男性ユーザのみを取得する処理
result = Array.new
if self.sex="male"
result.push(self)
end
end
end

userIns=User.getYoungUser
p userIns.getMaleUser

このような形で一回取得したオブジェクトに対してさらに処理を加えたいときに使えるのかなと。

//検証後に結果を反映します。

//ご指摘ありましたらいただけると幸いです。。。