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

发布于 2024-09-11 04:59:10 字数 462 浏览 9 评论 0原文

Rails 如何摆脱 .erb 文件中的以下内容?

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

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

我完全熟悉:

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

据我所知,以下行不通:

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

那么他们是如何做到的?他们如何让它发挥作用?

How does rails get away with the following in an .erb file?

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

How are they able to yield multiple times in the same context to different symbols? Is this some kind of rails magic?

I'm totally familiar with:

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

To my knowledge following doesn't work:

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

So how are they doing it? How do they make it work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

几度春秋 2024-09-18 04:59:10

他们将一个符号传递给yield...

yield :symbol

...而不是yield到不同的块。

它的工作原理更像是这样的:

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

They are passing a symbol into yield...

yield :symbol

...not yielding to a different block.

It works more like this:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文