23 表单处理之创建表单

在前一章中,我们讨论了如何在 Rails 应用程序中使用部分视图和布局来构建优雅的页面结构。这一节的重点是如何创建和处理表单,特别是在用户需要输入数据时。表单是 web 应用中与用户交互的重要部分,是获取用户输入并进行处理的主要途径。

创建表单

基本的表单生成

在 Rails 中,生成表单非常简单。我们可以使用 Rails 提供的表单辅助方法来创建。假设我们正在构建一个简单的博客应用,用户可以创建新的博客文章。我们将会创建一个表单,用于输入文章的标题和内容。

首先,我们需要生成一个文章模型。如果你还没有创建模型,可以使用以下命令:

1
2
rails generate model Article title:string content:text
rails db:migrate

接下来,在 articles_controller.rb 中,我们需要添加一个 new 方法来渲染创建表单。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class ArticlesController < ApplicationController
def new
@article = Article.new
end

def create
@article = Article.new(article_params)
if @article.save
redirect_to @article, notice: 'Article was successfully created.'
else
render :new
end
end

private

def article_params
params.require(:article).permit(:title, :content)
end
end

在这个代码片段中,new 方法初始化了一个新的文章对象,而 create 方法则处理了表单提交。

创建视图文件

现在,我们需要创建一个视图文件来显示这个表单。在 app/views/articles 目录中,创建一个名为 new.html.erb 的文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<%= form_with model: @article, local: true do |form| %>
<% if @article.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@article.errors.count, "error") %> prohibited this article from being saved:</h2>
<ul>
<% @article.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>

<div class="field">
<%= form.label :title %>
<%= form.text_field :title %>
</div>

<div class="field">
<%= form.label :content %>
<%= form.text_area :content %>
</div>

<div class="actions">
<%= form.submit %>
</div>
<% end %>

在这个视图中,我们使用了 form_with 辅助方法来生成表单。form_with 会自动关联我们的文章模型,并根据模型的属性生成相应的输入字段。

表单各部分的解释

  • form.label: 用于生成标签,方便用户理解输入框是干什么的。
  • form.text_field: 创建一个文本输入框,用于输入标题。
  • form.text_area: 创建一个文本区域,适合输入内容。
  • form.submit: 生成一个提交按钮。

通过这样的结构,当用户提交表单时,会触发 create 方法,数据会被检查并保存到数据库中。如果存在错误,用户将看到错误消息并能够修正这些错误。

小结

本章介绍了如何在 Rails 中创建表单,步入用户输入数据的流程。我们学习了如何使用 form_with 方法生成表单,并在表单中添加错误处理机制,为用户提供良好的交互体验。

接下来,我们将在下一章中讨论如何处理表单提交,解析用户输入的数据,并实现相应的业务逻辑。确保您已经理解了表单的创建,这对于处理用户交互至关重要。

23 表单处理之创建表单

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

作者

AI免费学习网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论