Я иногда вижу это в частичном шаблоне erb:
<%= yield :someval %>
Другие времена там не являются никаким урожаем вообще.
Каково преимущество вызова урожая в частичном?
Я использовал его в прошлом, если у меня есть частичная страница, которая может быть вызвана с разных страниц, которым может понадобиться контекстное содержимое страницы.
В качестве примера я использовал меню. У меня были мои стандартные пункты меню, но затем у меня был yield(:menu)
, так что когда пользователь загружал административную страницу, я мог добавлять пункты меню со страницы вместо того, чтобы писать оператор условия в самом partial.
Вот псевдокод:
%ul
%li Home
%li Users
%li Roles
= yield(:menu)
- content_for :menu do
%li Add User
%li Change permissions
- content_for :menu do
%li Add Role
В отличие от:
%ul
%li Home
%li Users
%li Roles
- if current_controller == 'users'
%li Add User
%li Change permissions
- if current_controller == 'roles'
%li Add Role
Хотя оба варианта функциональны (если бы это был реальный код), я предпочитаю первый метод. Второй может выйти из-под контроля и быстро стать довольно уродливым. Впрочем, это вопрос предпочтений.