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

时间:2019-05-21 08:30:40

标签: ruby-on-rails erb rails-console

我了解到Rails中有两种label方法(ActionView::Helpers::FormHelper#labelActionView::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方法,如何确定此方法调用的源位置?

1 个答案:

答案 0 :(得分: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