Chicken/egg: rails 是为视图调用布局,还是从布局调用视图?

Chicken/egg: does rails call a layout for a view, or a view from a layout?

我一直在学习 rails 教程,我试图了解当控制器转换为呈现视图时会发生什么。撇开本次讨论的模型不谈,当控制器为 some_view 工作时,将屈服于 some_view 的布局是标准 application.html.erb 布局,这里实际发生了什么?控制器是否调用视图,然后视图以某种方式调用布局,布局让位于视图?或者控制器是否寻找合适的布局,然后布局智能地屈服于视图?控制器中的动作与合适的视图和布局以某种方式配对,但我不清楚实际的动作链是什么。

从控制器调用视图。因此,例如 posts_controller 索引操作将在与控制器同名的视图文件夹中查找,然后查找与操作同名的模板... app/views/posts/index.html.erb。这个你已经知道了。

同样,默认情况下,它会在 app/views/layouts 文件夹中查找与控制器同名的布局...在这种情况下,它将查找 app/views/layouts/posts.html.erb.如果找不到该名称的文件,它将默认为 app/views/layouts/application.html.erb 作为默认布局模板。

Rails 魔法将两者放在一起,索引模板进入 <%= yield %> 区域。