Jupyter AI

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

📅 发表日期: 2024年8月15日

分类: 🌟Rails 入门

👁️阅读: --

在上一章中,我们了解了视图层的基本概念,以及在 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 和相关的视图。

rails generate controller Posts index show

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

步骤 2:定义控制器动作

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

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 来显示所有帖子的信息:

<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 文件中,我们展示单个帖子的详细信息:

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

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

ERB 标签的更多用法

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

条件语句示例

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

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

迭代和块

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

<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 应用更加简洁和高效。

🌟Rails 入门 (滚动鼠标查看)