こんにちは!kossyです!
さて、今回はRailsでメソッドの定義場所を調べる方法について、ブログに残してみたいと思います。
ActionView::Base#renderの定義場所を調べる
諸事情あってActionView::Base#renderの中身を知る必要がありました。
そこで、
の記事を参考に、定義場所を調べてみました。
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 リファレンスマニュアル)