25 表单处理之表单验证

在上一章中,我们讨论了如何处理表单提交,包括如何接收用户输入以及如何将数据保存到数据库中。本章将深入探讨如何对提交的表单数据进行验证,确保用户输入的数据符合我们的要求。

表单验证是提升应用程序可靠性的重要一步。通过对用户输入进行验证,我们可以避免不必要的错误,并提供更好的用户体验。在 Ruby on Rails 中,表单验证主要通过模型来进行。

验证基础

在 Rails 中,表单验证通常与模型关联。我们使用 ActiveRecord 模型中的内置验证方法来确保数据的完整性和准确性。以下是一些常见的验证方法:

  • validates_presence_of:确保字段不为空。
  • validates_length_of:确保字符串的长度符合要求。
  • validates_numericality_of:确保字段的值是数字。
  • validates_uniqueness_of:确保某个字段的值在数据库中是唯一的。

接下来,我们将通过一个示例来演示如何在 Rails 中进行表单验证。

示例:创建用户注册表单

假设我们正在构建一个用户注册系统。在这个系统中,我们需要创建一个用户模型,并对用户的输入数据进行验证。

首先,生成一个用户模型:

1
rails generate model User name:string email:string password:string

然后,在 app/models/user.rb 中,我们需要添加验证:

1
2
3
4
5
class User < ApplicationRecord
validates :name, presence: true, length: { minimum: 3 }
validates :email, presence: true, uniqueness: true, format: { with: URI::MailTo::EMAIL_REGEXP }
validates :password, presence: true, length: { minimum: 6 }
end

在上面的代码中,我们对 User 模型添加了以下验证规则:

  • name 字段必须存在,并且至少有 3 个字符。
  • email 字段必须存在,且必须是唯一的,格式必须符合电子邮件的正则表达式。
  • password 字段必须存在,且至少有 6 个字符。

调整控制器以处理验证

接下来,我们需要在控制器中处理这些验证。假设我们有一个 UsersController 来管理用户的创建。我们将在 create 动作中添加验证逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class UsersController < ApplicationController
def create
@user = User.new(user_params)

if @user.save
redirect_to @user, notice: '用户成功创建.'
else
render :new
end
end

private

def user_params
params.require(:user).permit(:name, :email, :password)
end
end

create 方法中,我们尝试保存用户对象。如果保存失败(即验证未通过),我们将重新渲染 :new 视图,以便用户可以查看错误信息。

在视图中显示验证错误

现在,我们需要在用户注册表单中显示验证错误。我们将更新 app/views/users/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
27
28
29
30
31
32
<% if @user.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
<ul>
<% @user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>

<%= form_with model: @user do |form| %>
<%# 表单字段 %>
<div>
<%= form.label :name %>
<%= form.text_field :name %>
</div>

<div>
<%= form.label :email %>
<%= form.text_field :email %>
</div>

<div>
<%= form.label :password %>
<%= form.password_field :password %>
</div>

<div>
<%= form.submit "注册" %>
</div>
<% end %>

在此代码中,我们检查 @user.errors 是否存在,若存在,则循环显示所有的错误消息。通过这种方式,用户能够清楚地看到他们输入错误的地方,并作出相应的修改。

总结

在本章中,我们探讨了如何在 Ruby on Rails 中对表单数据进行验证。通过使用 ActiveRecord 的验证功能,我们可以确保用户输入的数据符合我们预期的标准,从而提高应用程序的稳定性和数据完整性。

了解表单验证是奠定坚实开发基础的重要一步。在下一章中,我们将深入讨论模型的验证和回调机制,它们帮助我们在数据层面进一步控制数据的有效性和一致性。

25 表单处理之表单验证

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

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论