24
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?