在 Rails 控制台中使用辅助方法时确定 Rails 中标签方法的源位置

问题描述 投票:0回答:2

我知道 Rails 中有两种可用的

label
方法(
ActionView::Helpers::FormHelper#label
ActionView::Helpers::FormBuilder#label
)。当在
#label
中键入以下内容时,正在调用哪个
rails console
方法:

$ rails c
Loading development environment (Rails 5.0.7.2)
2.6.0 :001 > helper.label(:post, :title, "A short title", class: "title_label")
 => "<label class=\"title_label\" for=\"post_title\">A short title</label>"

我已经进入

gems/actionview-5.0.7.2/lib/action_view/helpers/form_helper.rb
并注释掉了两个
label
方法,如下所示:

#      def label(object_name, method, content_or_options = nil, options = nil, &block)
#        Tags::Label.new(object_name, method, self, content_or_options, options).render(&block)
#      end
.
.
.
#      def label(method, text = nil, options = {}, &block)
#        @template.label(@object_name, method, text, objectify_options(options), &block)
#      end

但是Rails控制台中仍然执行

label
方法,如何确定该方法调用的源位置?

ruby-on-rails erb rails-console
2个回答
1
投票

这是第一个。第二个需要一个

FormBuilder
对象(
f.
部分)才能工作。

注释掉这些方法后是否重新加载控制台?

我你正在使用Pry你可以使用

show-method
:

pry(main)> show-method helper.label

From: /home/user/.rvm/gems/ruby-2.5.3@gemset/gems/actionview-5.2.3/lib/action_view/helpers/form_helper.rb @ line 1114:
Owner: ActionView::Helpers::FormHelper
Visibility: public
Number of lines: 3

def label(object_name, method, content_or_options = nil, options = nil, &block)
  Tags::Label.new(object_name, method, self, content_or_options, options).render(&block)
end

0
投票

在 Ruby 中本地执行此操作的一种方法是使用

Method#source_location

> helper.method(:label).source_location
=> ["/Users/myuser/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/actionview-7.0.8.5/lib/action_view/helpers/form_helper.rb", 1143]
© www.soinside.com 2019 - 2024. All rights reserved.