こんなケースがあった
あるインスタンスメソッドに関して、
自分が考えうる定義箇所を全部見てまわり、
grep検索もかけたけど、どうしても定義箇所が見つからない。
ほんと、どこにあるのよ。w
普段のメソッド箇所の見つけ方
例えば、
@user.hoge
と書かれていたら、
User
モデルに hoge
メソッドが定義されてるんだろうな。
つまり、app/models/user.rb
に hoge
メソッドの内容が書かれているはずだ。
もし書かれていなかった場合は継承元に書かれているかも。
もしくは、ヘルパーがincludeされていれば、そのヘルパーに定義されているはずだ。
(注意点としては、ヘルパーがincludeされている可能性は、継承元にもあるということ。)
それでも見つからない場合は、
$ git grep hoge
という感じでgrep検索する。
それでも見つからない場合は・・・さぁどうしよう!
裏技みたいなやり方があった
まずはRailsコンソールを立ち上げて、コンソール上から
> @user.method(:hoge).source_location
日本語訳すると、Userモデルのインスタンスが持ってるインスタンスメソッドのうち、hoge
というメソッドの情報を取得して、そのメソッドのソースの在り処を取得するよ、って感じです。
最後に
やり方はわかったし、これは便利だ。
ただこれは、初中級者にはあまり教えたくない機能でもあります。
というのも、
これを多用しだすと、全体の構造が把握しづらくなります。
ですので、極力自分でどこに何が書いてあるかを把握するようにして、
最終手段としてこの方法を使うことをオススメします。
(同じ理由で、ジャンプ機能と呼ばれているものも同様です。便利ですけどね!)
補足
RailsというよりはRubyのメソッドなので、Railsでなくても使えます。
最近のバージョンであれば。