У меня есть следующая html-страница home.html.erb
:
<% provide(:title, 'Home') %>
<h1>Sample App</h1>
<p>
This is the home page for the
<a href="http://railstutorial.org/">Ruby on Rails Tutorial</a>
sample application.
</p>
И у меня есть следующий макет application.html.erb
<!DOCTYPE html>
<html>
<head>
<title><%= full_title(yield(:title)) %></title>
...
</head>
<body>
<%= yield %>
</body>
</html>
full_title()
- это функция, которая проверяет, был ли заголовок передан как параметр. Если бы это было, он поместил бы его в HTML. Если параметр не задан, он помещает базовый заголовок в HTML.
Я предполагаю, что рельсы начинаются с прохождения через application.html.erb
а затем, достигнув <%= yield %>
, он будет вставлять содержимое home.html.erb
в application.html.erb
в этом месте, в результате чего следующий документ:
<!DOCTYPE html>
<html>
<head>
<title><%= full_title(yield(:title)) %></title>
...
</head>
<body>
<% provide(:title, 'Home') %>
<h1>Sample App</h1>
<p>
This is the home page for the
<a href="http://railstutorial.org/">Ruby on Rails Tutorial</a>
sample application.
</p>
</body>
</html>
В 4-й строке <%= full_title(yield(:title)) %>
значение "Home" определенно передается для :title
, но код <% provide(:title, 'Home') %>
не до нескольких строк. Rails идет назад, чтобы выполнить это? Как это происходит?
Нет, нет. Это своего рода интерполяция строк, это значение будет заменено после каждого вызова обеспечения (: title,...)
Я понимаю, что home.html.erb обрабатывается до макета приложения. Другими словами, представление и помощник подготовлены и "подключены" к макету приложения до того, как все будет завершено. Я думаю, что "движение назад" зависит от того, каким образом вы смотрите на него/как он работает. Я все еще учусь, но это не обязательно последовательность "сверху вниз" с точки зрения того, как код выкладывается на странице.