Подтвердить что ты не робот

Как Ruby on Rails использует доходность для макетов?

yield используется для вызова блока. Как это работает в Rails, где yield используется для макетов?

-# application.html.haml
%body= yield

Использует ли он блоки где-то или метод просто переопределен?

4b9b3361

Ответ 1

Технически, yield также вызывает блок в этом контексте. Тем не менее, этот блок - это представление, которое вашему контроллеру было предложено выполнить.

Например, скажем, у вас есть StaticContentController, на котором есть действие index, которое представляло вашу домашнюю страницу. Если маршруты настроены правильно, вы заходите на свою домашнюю страницу. Rails загрузит файл макета в views/layouts, который подходит для этого контроллера (application.html.haml, если вы не переопределите это с помощью макета для своего контроллера). Когда он достигает команды yield, он вставляет представление в views/static_content/index.html.haml в том месте, где yield находится внутри вашего макета. Затем он загружает остальную часть вашего файла макета.

Ответ 2

По умолчанию всем функциям Ruby может быть передан блок:

def twice
  yield
  yield
end

> twice { print 'hi ' }
=> hi hi

Лучший способ думать о макете - это метод, вызываемый блоком.

Когда Rails создает шаблон, он фактически вызывает вызов Layout # render. Макет # render принимает блок по умолчанию. По умолчанию Rails передает ваше представление в виде этого блока. Это означает, что вызов выхода из вашего макета походит на вызов блока по умолчанию, который в этом случае является вашим представлением.