Ruby on Rails如何使用yield来进行布局?

19 ruby methods yield ruby-on-rails block

yield用于调用块.这在Rails中如何yield用于布局?

-# application.html.haml
%body= yield
Run Code Online (Sandbox Code Playgroud)

它是在某处使用块还是简单地覆盖了方法?

Sha*_*aun 19

从技术上讲,yield也是在这种情况下调用一个块.但是,块是控制器操作被告知要呈现的视图.

例如,假设你有StaticContentController一个具有index它的行动,代表您的主页.正确配置路由后,您将访问主页.Rails将加载views/layouts适合该控制器的布局文件(application.html.haml除非您使用控制器的布局覆盖它).当它到达yield命令时,它会将视图插入布局内views/static_content/index.html.haml的位置yield.然后,它加载您的布局文件的其余部分.


Pan*_*kos 8

默认情况下,所有Ruby函数都可以传递给一个块:

def twice
  yield
  yield
end

> twice { print 'hi ' }
=> hi hi

考虑布局的最佳方法是使用块调用的方法.

当Rails呈现模板时,它实际上是在调用Layout#render.Layout#render接受默认块.默认情况下,Rails会将您的视图作为此块传递.这意味着从布局中调用yield就像调用默认块一样,在这种情况下是您的视图.