Spec-Zone.ru › Ruby on Rails 7.1

module ActionView::Helpers::RenderingHelper

Справочные методы рендеринга Action View

Реализует методы, позволяющие выполнять рендеринг из контекста представления. Для использования этого модуля необходимо реализовать метод view_renderer, который возвращает объект ActionView::Renderer.

Открытые методы экземпляра

_layout_for(*args, &block) Показать исходный код
# File actionview/lib/action_view/helpers/rendering_helper.rb, line 97
def _layout_for(*args, &block)
  name = args.first

  if block && !name.is_a?(Symbol)
    capture(*args, &block)
  else
    super
  end
end

Переопределяет _layout_for в объекте контекста, чтобы он поддерживал случай, когда частичному представлению передаётся блок кода. Возвращает содержимое, передаваемое в макет, с учётом имени или блока кода.

Можно рассматривать макет как метод, который вызывается с блоком кода. Если пользователь вызовет yield :some_name, блок кода по умолчанию вернёт content_for(:some_name). Если пользователь вызовет просто yield, по умолчанию блок кода вернёт content_for(:layout).

Пользователь может переопределить это поведение, передав блок кода в макет:

# The template
<%= render layout: "my_layout" do %>
  Content
<% end %>

# The layout
<html>
  <%= yield %>
</html>

В этом случае вместо блока кода по умолчанию, который вернул бы content_for(:layout), этот метод вернёт блок кода, переданный в render :layout, и ответом будет

<html>
  Content
</html>

Наконец, блок кода может принимать аргументы блока, которые могут быть переданы с помощью yield:

# The template
<%= render layout: "my_layout" do |customer| %>
  Hello <%= customer.name %>
<% end %>

# The layout
<html>
  <%= yield Struct.new(:name).new("David") %>
</html>

В этом случае макет получит блок кода, переданный в render :layout, а заданная структура будет передана в блок кода в качестве аргумента. Результатом будет

<html>
  Hello David
</html>
Вызывает метод суперкласса
render(options = {}, locals = {}, &block) Показать исходный код
# File actionview/lib/action_view/helpers/rendering_helper.rb, line 30
def render(options = {}, locals = {}, &block)
  case options
  when Hash
    in_rendering_context(options) do |renderer|
      if block_given?
        view_renderer.render_partial(self, options.merge(partial: options[:layout]), &block)
      else
        view_renderer.render(self, options)
      end
    end
  else
    if options.respond_to?(:render_in)
      options.render_in(self, &block)
    else
      view_renderer.render_partial(self, partial: options, locals: locals, &block)
    end
  end
end

Возвращает результат рендеринга, определяемого хэшем опций. Основные опции:

  • :partial - См. ActionView::PartialRenderer.

  • :file - Рендерит явное шаблонное файл (раньше это было значением по умолчанию), добавьте :locals для передачи этих значений.

  • :inline - Рендерит встроенный шаблон аналогично тому, как это делается в контроллере.

  • :plain - Рендерит переданный текст. Устанавливает тип контента как text/plain.

  • :html - Рендерит переданную строку HTML-безопасной строкой, в противном случае сначала выполняется HTML-экранирование строки. Устанавливает тип контента как text/html.

  • :body - Рендерит переданный текст и наследует тип контента text/plain из объекта ActionDispatch::Response.

Если хэш options не передан или если указано :update, то:

Если передан объект, отвечающий на render_in, вызывается render_in для объекта, передавая текущий контекст представления.

В противном случае рендерится частичное представление с использованием второго параметра в качестве хэша локальных переменных.

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API