ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.4006941 Ruby on Rails: メソッドの定義で「self.」をつけるケースについて
質問者:kaiji メソッドの名前に「self.」をつけるケースというは、
どういうことがあてはまるのでしょうか.

具体的には、以下のようなname_displayメソッドを作ったのですが、
「self.」をつけないと、undifined methodエラーになってしまいます.
偶然、self.をつけたら動いたので、そういうものかとわかりました.
ただ、理由がわかりません.
ご存知の方、お教えください.

Userモデル
id,username

class User < ActiveRecord::Base
def self.name_display(userid)
begin
@username = User.find(userid)
return @username.username
rescue
return '削除ユーザ'
end
end
end
困り度:
  • 困っています
質問投稿日時:
08/05/08 16:59
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.1 この name_dispalyメソッドはどこでどのように使ってますか?

def self.メソッド名 のようにして定義したメソッドは「クラスメソッド」
なのに対して、def メソッド名 のようにして定義したものは「インスタンスメソッド」となります。

後者の場合はそのクラスのインスタンスを生成した上で、そのインスタンスにメッセージを送る
という形でメソッドを起動しなければなりません。
前者のクラスメソッドではインスタンスを生成しなくても呼び出すことができます。
回答者:sakusaker7
種類:補足要求
どんな人:経験者
自信:参考意見
回答日時:
08/05/08 21:58
この回答へのお礼ありがとうございます!
クラスメソッドですか…それでググってもっと調べてみます.
インスタンスを生成する必要かないかの違いですね.

…でも、なぜそういう違いが必要になるのだろう.
それがわからないと、また偶然でつくるしかないですね.
腑に落ちるまでとても時間かかります.

でも、糸口見つかったので大躍進です.
ありがとうございます.