Определение исходного местоположения метода меток в Rails при использовании вспомогательного метода внутри консоли Rails - PullRequest
1 голос
/ 21 мая 2019

Я понимаю, что в 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

И все же он все еще выполняет метод label в консоли Rails, как я могу определить исходное местоположение этого вызова метода?

1 Ответ

1 голос
/ 21 мая 2019

Это первый. Для работы второго необходим объект FormBuilder (часть f.).

Вы перезагрузили консоль после того, как закомментировали эти методы?

Я использую Прай Вы можете использовать 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
...