Rails如何在erb模板中产生多个块?

har*_*ell 4 ruby yield ruby-on-rails

rails如何在.erb文件中使用以下内容?

<%= yield :sidebar %>
<%= yield :other_bar %>
<%= yield :footer %>
Run Code Online (Sandbox Code Playgroud)

他们如何能够在不同符号的相同上下文中多次产生?这是某种魔力吗?

我完全熟悉:

def some_method(arg1, arg2, &block)
 yield(:block)
end
Run Code Online (Sandbox Code Playgroud)

据我所知,以下不起作用:

def some_incorrect_method(arg1, &block1, &block2)
 yield(:block1)
 yield(:block2)
end
Run Code Online (Sandbox Code Playgroud)

那么他们是怎么做到的呢?他们如何使它工作?

Mik*_*ffe 17

他们正在将一个符号传递给...

yield :symbol
Run Code Online (Sandbox Code Playgroud)

......不屈服于另一个街区.

它更像是这样的:

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
Run Code Online (Sandbox Code Playgroud)