本文概述
在Rails中, 布局是可以组合在一起(例如页眉, 页脚, 菜单等)以构成完整视图的块。一个应用程序可以具有所需的任意多个布局。 Rails使用约定优于配置来自动将布局与具有相同名称的各个控制器配对。
Rails布局基本上在”不要重复自己”原理(DRY)下工作。
在Rails中, 默认情况下启用布局。每当你生成新的Rails应用程序时, 都会在app / views / layouts中自动为你生成一个布局。
首先, 我们需要定义一个布局模板, 然后为控制器定义知道该布局存在的路径。
建立回应
从控制器的角度来看, 有三种创建HTTP响应的方法:
- 调用渲染以创建完整响应以发送回浏览器
- 调用redirect_to向浏览器发送HTTP重定向状态代码
- 呼叫头以创建响应并返回到浏览器
收益声明的重要性
Rails中的yield语句决定将布局的内容呈现在何处。如果布局中没有yield语句, 则将呈现布局文件本身, 但动作模板中的其他内容将无法正确放置在布局中。
因此, 需要在布局文件中添加yield语句。
<%= yield %>
Rails布局和模板之间的关系
在应用程序中发出请求时, 将发生以下过程:
- 首先, Rails在控制器动作中找到用于相应动作的模板以呈现方法。
- 然后找到要使用的正确布局。
- 它使用动作模板来生成特定于该动作的内容。
- 最后, 它查找布局的yield语句, 并在此处插入操作的模板。
寻找正确的布局
Rails在app / layouts目录中搜索与控制器名称相同名称的布局。
例如, 如果你有一个名为GioController的控制器, 则导轨将搜索layouts / gio.html.erb布局。它不存在具有相同名称的布局, 则它将使用默认布局app / views / layouts / appplication.html.erb
例:
前面我们做了一个示例, 其输出如下:
现在在此应用程序中, 我们将插入一个布局文件。
步骤1转到app / layouts / application.html.erb文件, 删除所有代码并编写以下代码。
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<%= yield %>
</body>
</html>
步骤2转到app / layouts目录并创建lay.html.erb文件。
<!DOCTYPE html>
<html>
<head>
<title>Layout Example</title>
</head>
<body>
<h1>Layout Example</h1>
<%= yield %>
<p>www.srcmini02.com</p>
</body>
</html>
步骤3通过编写以下代码将其插入app / controllers / users_controller.rb文件。
class UsersController < ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy]
layout "lay"
def index
code....
步骤4在浏览器上运行它。
下载
下载此示例