Вопрос новичка, что здесь означает «доходность»? - PullRequest
2 голосов
/ 09 марта 2011

Я видел чей-то код в View / car.html.haml, например:

%body
  =yield

Кто-нибудь может мне объяснить использование здесь "= yield"?

-где я могу найти фактический код части тела?

-Что это значит,

- зачем использовать или в каких ситуациях мы должны его использовать?

Ответы [ 3 ]

4 голосов
/ 09 марта 2011

Обычно это будет отображаться в файле макета (по умолчанию - views / layouts / application.html.haml).Он просто указывает Rails визуализировать содержимое текущего действия в этом местоположении.

Так что если у вас есть views / layouts / application.html.haml с:

%body
  =yield

И у вас есть views / posts / index.html.haml с:

%h1 This is the posts index page!  :D

Затем, когда вы перейдете к действию, которое отображает страницу индекса постов (вероятно, / posts), вы увидите HTML, которыйзаголовок отображается в местоположении yield в файле макета:

<body>
  <h1>This is the posts index page! :D</h1>
</body>

Это особенно полезно для включения таких вещей, как обычная разметка навигации по страницам или заголовки, которые должны отображаться на всех страницах безпереопределить точный HTML в каждом представлении.

Если у вас другой макет для отдельного раздела вашего сайта, вы можете отобразить его в контроллере следующим образом:

def index
  if signed_in?
    render :layout => 'application'
  else
    render 'user/unauthorized', :layout => 'external' and return
  end
end

Который будет использовать указанный вид, отображаемый внутри указанного макета везде, где встречается макет yield.В остальной части оператора user/unauthorized.html.haml будет отображаться в макете layouts/external.html.haml, а в Sign_in?на тот случай, если вы получите представление posts/index.html.haml в макете layouts/application.html.haml.

1 голос
/ 09 марта 2011

http://api.rubyonrails.org/classes/ActionView/Partials.html

Статья выше объяснит, что это значит, синтаксис не тот, так как документация написана на erb, а вы имеете дело с haml. Фактический код тела наиболее вероятен в частичном _body.html.haml.

0 голосов
/ 19 июня 2017

Эта определенная выше функция на самом деле является функцией-генератором, в которой мы обычно определяем функцию, но используем оператор yield вместо return, указывая интерпретатору, что эта функция должна рассматриваться как итератор.

Оператор yield приостанавливает функцию и сохраняет локальное состояние, чтобы его можно было возобновить с того места, где оно было прервано.

Когда мы вызовем эту функцию, она выдаст нам вывод

val = countdown(5)
>>> val
<generator object countdown at 0x10213aee8>

Функция фактически возвратила объект генератора. Таким образом, функции генератора вызываются по-другому следующим образом:

Объекты генератора выполняются при вызове next ().

>>> next(val)
Starting
5 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...