Как Rails уступает нескольким блокам в шаблонах erb? - PullRequest
4 голосов
/ 22 июля 2010

Каким образом рельсы обходятся без следующего в файле .erb?

<%= yield :sidebar %>
<%= yield :other_bar %>
<%= yield :footer %>

Как они могут давать несколько раз в одном и том же контексте разным символам?Это какая-то магия рельсов?

Я полностью знаком с:

def some_method(arg1, arg2, &block)
 yield(:block)
end

Насколько мне известно, следующее не работает:

def some_incorrect_method(arg1, &block1, &block2)
 yield(:block1)
 yield(:block2)
end

Так какони делают это?Как они заставляют это работать?

Ответы [ 2 ]

17 голосов
/ 22 июля 2010

Они передают символ в доход ...

yield :symbol

... не уступая другому блоку.

Это работает примерно так:

def some_method(arg1, arg2, &block)
  yield(:some_symbol1)
  yield(:some_symbol2)
end

some_method do |symbol|
  case symbol
  when :some_symbol1
     # do A
  when :some_symbol2
     # do B
  else
     # unrecognised symbol?
  end
end
1 голос
/ 22 июля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...