23 表单处理之创建表单
在前一章中,我们讨论了如何在 Rails 应用程序中使用部分视图和布局来构建优雅的页面结构。这一节的重点是如何创建和处理表单,特别是在用户需要输入数据时。表单是 web 应用中与用户交互的重要部分,是获取用户输入并进行处理的主要途径。
创建表单
基本的表单生成
在 Rails 中,生成表单非常简单。我们可以使用 Rails 提供的表单辅助方法来创建。假设我们正在构建一个简单的博客应用,用户可以创建新的博客文章。我们将会创建一个表单,用于输入文章的标题和内容。
首先,我们需要生成一个文章模型。如果你还没有创建模型,可以使用以下命令:
rails generate model Article title:string content:text
rails db:migrate
接下来,在 articles_controller.rb
中,我们需要添加一个 new
方法来渲染创建表单。
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
的文件。
<%= 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
方法生成表单,并在表单中添加错误处理机制,为用户提供良好的交互体验。
接下来,我们将在下一章中讨论如何处理表单提交,解析用户输入的数据,并实现相应的业务逻辑。确保您已经理解了表单的创建,这对于处理用户交互至关重要。