26 模型和数据验证之模型验证和回调
在上一章中,我们讲解了如何处理表单验证。在这一章中,我们将深入探讨模型的验证和回调。验证是确保数据的完整性和准确性的重要步骤,而回调则允许我们在对象的生命周期中插入自定义逻辑。让我们一起看看如何在 Rails 中实现这些功能。
模型验证
在 Ruby on Rails 中,模型验证用于确保数据在被保存到数据库之前符合特定的规则。我们可以在模型中定义多个验证规则,包括但不限于:必填验证、唯一性验证、格式验证等。
常见的验证类型
必填验证(
validates :attribute, presence: true
)
确保字段不为空。1
2
3
4class User < ApplicationRecord
validates :name, presence: true
validates :email, presence: true
end唯一性验证(
validates :attribute, uniqueness: true
)
确保字段的值在数据库中是唯一的。1
2
3class User < ApplicationRecord
validates :email, uniqueness: true
end格式验证(
validates :attribute, format: { with: // }
)
确保字段值符合特定的正则表达式格式。1
2
3class User < ApplicationRecord
validates :email, format: { with: URI::MailTo::EMAIL_REGEXP }
end长度验证(
validates :attribute, length: { minimum: , maximum:}
)
检查字符串的长度。1
2
3class User < ApplicationRecord
validates :password, length: { minimum: 6 }
end
自定义验证
你还可以创建自定义验证方法,以实现更复杂的验证逻辑。
1 | class User < ApplicationRecord |
模型回调
回调是指在 Active Record 对象的生命周期中的某个时刻自动调用的方法。它们允许我们在特定事件时插入自定义逻辑,比如在创建、更新或删除对象时所执行的操作。
常见的回调类型
before_save
在保存对象之前执行。1
2
3
4
5
6
7
8
9class User < ApplicationRecord
before_save :downcase_email
private
def downcase_email
self.email = email.downcase
end
endafter_create
在对象创建后执行。1
2
3
4
5
6
7
8
9class User < ApplicationRecord
after_create :send_welcome_email
private
def send_welcome_email
UserMailer.welcome_email(self).deliver_now
end
endbefore_destroy
在对象删除之前执行。1
2
3
4
5
6
7
8
9class User < ApplicationRecord
before_destroy :notify_user
private
def notify_user
# 发送通知给用户
end
end
回调的使用案例
假设我们有一个博客应用,需要在创建文章时自动设置作者为当前用户,并同时将文章的状态设为“草稿”。我们可以这样实现:
1 | class Post < ApplicationRecord |
小结
在本章中,我们探讨了模型验证和回调的相关知识,学习了如何使用 Rails 提供的验证方法来确保数据的完整性,同时也了解了如何在模型生命周期的不同阶段插入自定义逻辑。下章中,我们将继续深入模型验证,特别是关联模型的验证策略,让我们一起期待更复杂的模型操作。
接下来,我们将讲解关联模型的验证,这将帮助我们理解如何在多个模型间建立有效的数据关系并进行验证。
希望这章内容能够帮助你更好地理解 Rails 的模型验证和回调机制!
26 模型和数据验证之模型验证和回调