📜  验证自定义列名称上的 rails 模型 - Ruby (1)

📅  最后修改于: 2023-12-03 14:58:50.870000             🧑  作者: Mango

验证自定义列名称上的 Rails 模型 - Ruby

在 Rails 中,我们通常使用 ActiveRecord 模型来操作数据库。有时我们需要为模型添加一些自定义列,并对其进行验证,以确保合法性和数据完整性。

本文将介绍如何在 Rails 模型中验证自定义列名称。

自定义列的创建

首先,我们需要创建自定义列。请参考下面的示例:

class Student < ApplicationRecord
  attr_accessor :grade_year

  def grade_year
    @grade_year || 'N/A'
  end

  def grade_year=(year)
    @grade_year = year.to_s.strip.presence
  end
end

在这个例子中,我们创建了一个名为 grade_year 的自定义列,并通过 attr_accessor 方法创建了一个实例变量 @grade_year。还定义了 grade_yeargrade_year= 两个方法用于获取和设置自定义列的值。

此时我们并没有为自定义列添加任何验证。

验证自定义列的值

接下来,我们需要为自定义列添加验证。我们可以使用 Rails 提供的验证方法,如 validates_presence_ofvalidates_format_ofvalidates_length_of 等。

class Student < ApplicationRecord
  attr_accessor :grade_year

  validates_presence_of :grade_year
  validates_format_of :grade_year, with: /\A\d{4}\z/
  validates_inclusion_of :grade_year, in: %w[2019 2020 2021]

  def grade_year
    @grade_year || 'N/A'
  end

  def grade_year=(year)
    @grade_year = year.to_s.strip.presence
  end
end

在这个例子中,我们为自定义列 grade_year 添加了三个验证:

  • validates_presence_of 验证自定义列不能为空;
  • validates_format_of 验证自定义列符合格式要求,这里我们要求 grade_year 必须是四位数字;
  • validates_inclusion_of 验证自定义列的值必须在给定的范围内,这里我们要求 grade_year 必须是 2019、2020 或 2021。

对于未通过验证的自定义列,valid? 方法会返回 falseerrors 方法会返回错误信息。

student = Student.new(grade_year: '2018')
student.valid? # => false
student.errors.full_messages # => ["Grade year is invalid"]
总结

在本文中,我们学习了如何为自定义列添加验证,并使用 Rails 提供的验证方法来验证自定义列的值。如果在模型中验证自定义列,可以增加应用的稳定性和可靠性,避免不合法的数据进入数据库。

完整代码请参考 Github

参考链接