railsでメソッドの定義場所をコンソールから確認してみた

こんにちは!kossyです!




さて、今回はRailsでメソッドの定義場所を調べる方法について、ブログに残してみたいと思います。



環境

Ruby 2.6.6
Rails 5.2.4
Docker for mac



ActionView::Base#renderの定義場所を調べる

諸事情あってActionView::Base#renderの中身を知る必要がありました。

そこで、

qiita.com

の記事を参考に、定義場所を調べてみました。

controller = ActionController::Base.new
view = ActionView::Base.new(Rails.root.join('app', 'views'), {}, controller)

view.method(:render).source_location
=> ["/var/rails/www/shared/bundle/ruby/2.6.0/gems/actionview-5.2.4.4/lib/action_view/helpers/rendering_helper.rb", 27]

はい。rendering_helper.rbの27行目に定義されているとのこと。

RailsソースコードGithubにアップされているので、Githubにアクセスしてメソッドの中身を確認します。

rails/rendering_helper.rb at 5-2-stable · rails/rails · GitHub

      def render(options = {}, locals = {}, &block)
        case options
        when Hash
          if block_given?
            view_renderer.render_partial(self, options.merge(partial: options[:layout]), &block)
          else
            view_renderer.render(self, options)
          end
        else
          view_renderer.render_partial(self, partial: options, locals: locals, &block)
        end
      end

見つかりました。ここからGithubの定義元ジャンプ機能を利用してコードを追っていくことができると思います。




勉強になりました。



大いに参考にさせていただいた記事

この場を借りて御礼を申し上げます。

Rubyでメソッドの定義場所を見つける方法 - Qiita
Method#source_location (Ruby 3.0.0 リファレンスマニュアル)