В этом примере Rails идет «назад» в коде?

0

У меня есть следующая 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 идет назад, чтобы выполнить это? Как это происходит?

Теги:

2 ответа

1

Нет, нет. Это своего рода интерполяция строк, это значение будет заменено после каждого вызова обеспечения (: title,...)

0

Я понимаю, что home.html.erb обрабатывается до макета приложения. Другими словами, представление и помощник подготовлены и "подключены" к макету приложения до того, как все будет завершено. Я думаю, что "движение назад" зависит от того, каким образом вы смотрите на него/как он работает. Я все еще учусь, но это не обязательно последовательность "сверху вниз" с точки зрения того, как код выкладывается на странице.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню