module ActionView::Helpers::RenderingHelper
Справочные методы рендеринга Action View
Реализует методы, позволяющие выполнять рендеринг из контекста представления. Для использования этого модуля необходимо реализовать метод view_renderer, который возвращает объект ActionView::Renderer.
Открытые методы экземпляра
# 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>
# 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.