Является ли render 'contrib' синонимом render: action => 'contrib' - PullRequest
3 голосов
/ 09 июня 2009

Имеют ли эти две формы 'render' одинаковый эффект?

render 'contribute'
render :action => 'contribute'

1 Ответ

1 голос
/ 09 июня 2009

Короче говоря: да, они одинаковы. Однако иногда передача строки приводит к вызову render :file или render :template.

Вот документы API для функции рендеринга

Если прокрутить вниз и нажать «Показать исходный код», мы увидим, что он делает изнутри.

Обратите внимание на блок, начинающийся со строки 872:

872:         elsif options.is_a?(String) || options.is_a?(Symbol)
873:           case options.to_s.index('/')
874:           when 0
875:             extra_options[:file] = options
876:           when nil
877:             extra_options[:action] = options
878:           else
879:             extra_options[:template] = options
880:           end

Глядя на этот код, мы можем определить, что он пытается быть умным.

  • Если строка начинается с /, (случай when 0), то она будет вызывать render :file
  • Если строка вообще не содержит / (случай when nil), то она вызовет render :action
  • Если строка содержит / где-то в середине или конце строки (тогда else case), то она вызовет render :template

Надеюсь, это удовлетворительно ответит на ваш вопрос: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...