Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails如何在布局中使用yield?_Ruby On Rails_Ruby_Methods_Block_Yield - Fatal编程技术网

Ruby on rails RubyonRails如何在布局中使用yield?

Ruby on rails RubyonRails如何在布局中使用yield?,ruby-on-rails,ruby,methods,block,yield,Ruby On Rails,Ruby,Methods,Block,Yield,yield用于调用块。在布局使用yield的Rails中,这是如何工作的 -# application.html.haml %body= yield 它是在某处使用块还是简单地重写了该方法?从技术上讲,yield也在该上下文中调用块。但是,该块是控制器操作被告知渲染的视图 例如,假设您有一个StaticContentController,上面有一个索引操作,表示您的主页。正确配置路由后,您可以访问主页。Rails将在视图/layouts中加载适合该控制器的布局文件(application.ht

yield
用于调用块。在布局使用
yield
的Rails中,这是如何工作的

-# application.html.haml
%body= yield

它是在某处使用块还是简单地重写了该方法?

从技术上讲,
yield
也在该上下文中调用块。但是,该块是控制器操作被告知渲染的视图


例如,假设您有一个
StaticContentController
,上面有一个
索引
操作,表示您的主页。正确配置路由后,您可以访问主页。Rails将在
视图/layouts
中加载适合该控制器的布局文件(
application.html.haml
,除非您用控制器的布局覆盖该文件)。当它到达
yield
命令时,它会在
views/static\u content/index.html.haml
的布局中
yield
所在的位置插入视图。然后,它加载布局文件的其余部分。

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

def twice yield yield end > twice { print 'hi ' } => hi hi def两次 产量 产量 结束 >两次{打印“hi”} =>嗨,嗨 考虑布局的最佳方式是使用块调用方法

Rails渲染模板时,实际上是在调用Layout#render。布局#渲染接受默认块。默认情况下,Rails作为此块通过视图。这意味着从布局中调用yield类似于调用默认块,在本例中是视图