21 视图和模板之使用ERB模板引擎

在上一章中,我们了解了视图层的基本概念,以及在 Ruby on Rails 中视图如何与控制器和模型交互。这一章将重点讨论使用 ERB 模板引擎来创建动态视图。ERB(Embedded Ruby)允许我们在 HTML 中嵌入 Ruby 代码,从而生成动态的内容。

什么是 ERB?

ERB 是 Ruby 提供的一种模板系统,它允许你在 .html.erb 文件中将 Ruby 代码嵌入到 HTML 中。当 Rails 处理请求时,会渲染这些 ERB 文件并生成最终的 HTML 代码。ERB 主要有两个标签:

  • <% %>:用来执行 Ruby 代码,但不将结果输出到模板中。
  • <%= %>:用来执行 Ruby 代码,并将结果输出到模板中。

使用 ERB 模板的例子

让我们来看看一个具体的例子,假设我们有一个名为 PostsController 的控制器,它负责显示博客文章。

步骤 1:生成控制器和视图

首先,使用 Rails 命令生成一个 PostsController 和相关的视图。

1
rails generate controller Posts index show

这将生成 PostsController 和两个视图文件:index.html.erbshow.html.erb

步骤 2:定义控制器动作

接下来,我们在 PostsController 中定义 indexshow 动作:

1
2
3
4
5
6
7
8
9
class PostsController < ApplicationController
def index
@posts = Post.all
end

def show
@post = Post.find(params[:id])
end
end

步骤 3:创建 ERB 视图

index.html.erb

app/views/posts/index.html.erb 文件中,我们将使用 ERB 来显示所有帖子的信息:

1
2
3
4
5
6
7
8
9
<h1>博客文章列表</h1>

<ul>
<% @posts.each do |post| %>
<li>
<a href="<%= post_path(post) %>"><%= post.title %></a>
</li>
<% end %>
</ul>

在这个示例中,我们使用 <% %> 来遍历每个帖子,并使用 <%= %> 输出帖子标题和生成链接。

show.html.erb

app/views/posts/show.html.erb 文件中,我们展示单个帖子的详细信息:

1
2
3
<h1><%= @post.title %></h1>
<p><%= @post.content %></p>
<a href="<%= posts_path %>">返回文章列表</a>

这里,我们也使用了 ERB 标签来显示帖子的标题和内容。

ERB 标签的更多用法

除了基本的输出,ERB 还支持条件语句和循环等更复杂的逻辑。

条件语句示例

我们可以使用条件语句来根据帖子的状态显示不同的信息。例如,在 show.html.erb 中添加一个条件:

1
2
3
4
5
<% if @post.published? %>
<p>这是公开帖子。</p>
<% else %>
<p>此帖子尚未发布。</p>
<% end %>

迭代和块

ERB 还可以用于生成表格或其他结构。例如,我们可以在 index.html.erb 中用表格显示帖子列表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<table>
<thead>
<tr>
<th>标题</th>
<th>创建时间</th>
</tr>
</thead>
<tbody>
<% @posts.each do |post| %>
<tr>
<td><%= post.title %></td>
<td><%= post.created_at.strftime('%Y-%m-%d') %></td>
</tr>
<% end %>
</tbody>
</table>

在这个示例中,我们使用了 ERB 来生成一张表,其中每一行都是一个帖子的信息,展示标题和创建时间。

结论

这一章我们深入探讨了如何使用 ERB 模板引擎来创建动态视图。通过结合 Ruby 代码和 HTML,我们能够生成灵活且动态的内容。ERB 的标签使我们能够在视图中写入逻辑,使得渲染的 HTML 更加个性化和丰富。

在下一章中,我们将学习部分视图和布局,以进一步提高视图的复用性和结构化设计。通过正确利用部分视图和布局,我们可以让 Rails 应用更加简洁和高效。

21 视图和模板之使用ERB模板引擎

https://zglg.work/rails-zero/21/

作者

AI免费学习网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论