📜  rails 验证器 - Ruby (1)

📅  最后修改于: 2023-12-03 15:19:42.280000             🧑  作者: Mango

Rails 验证器

在 Rails 中,验证器是用来验证模型数据是否符合指定要求的工具。通过使用验证器,我们可以确保数据的完整性和一致性。

内置验证器

Rails 提供了许多内置的验证器,下面是其中一些常用的验证器,还有其他更多验证器可以查看官方文档。

presence

presence 验证器用来验证属性是否为空。例如:

class User < ApplicationRecord
  validates :name, presence: true
end

以上代码表示 User 模型的 name 属性必须存在,否则无法保存。

uniqueness

uniqueness 验证器用来验证属性的唯一性。例如:

class User < ApplicationRecord
  validates :email, uniqueness: true
end

以上代码表示 User 模型的 email 属性必须是唯一的,否则无法保存。

length

length 验证器用来验证属性的长度。例如:

class User < ApplicationRecord
  validates :password, length: { minimum: 6, maximum: 20 }
end

以上代码表示 User 模型的 password 属性必须在 6 到 20 个字符之间,否则无法保存。

format

format 验证器用来验证属性是否符合指定的正则表达式。例如:

class User < ApplicationRecord
  validates :email, format: { with: /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i }
end

以上代码表示 User 模型的 email 属性必须符合指定的正则表达式,否则无法保存。

自定义验证器

除了内置的验证器之外,Rails 还支持自定义验证器。自定义验证器通常用于复杂的验证需求,例如依赖其他属性来验证某个属性的值。

下面是一个示例代码:

class Order < ApplicationRecord
  validate :expiration_date_cannot_be_in_the_past

  def expiration_date_cannot_be_in_the_past
    if expiration_date.present? && expiration_date < Date.today
      errors.add(:expiration_date, "can't be in the past")
    end
  end
end

以上代码表示 Order 模型的 expiration_date 属性不能早于今天。

参考链接