LoginSignup
24
21

More than 5 years have passed since last update.

Rails selfの使い道

Last updated at Posted at 2016-02-14

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

このような形で一回取得したオブジェクトに対してさらに処理を加えたいときに使えるのかなと。
//検証後に結果を反映します。
//ご指摘ありましたらいただけると幸いです。。。

24
21
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
21