📅  最后修改于: 2023-12-03 14:58:50.870000             🧑  作者: Mango
在 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_year
和 grade_year=
两个方法用于获取和设置自定义列的值。
此时我们并没有为自定义列添加任何验证。
接下来,我们需要为自定义列添加验证。我们可以使用 Rails 提供的验证方法,如 validates_presence_of
、validates_format_of
、validates_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?
方法会返回 false
,errors
方法会返回错误信息。
student = Student.new(grade_year: '2018')
student.valid? # => false
student.errors.full_messages # => ["Grade year is invalid"]
在本文中,我们学习了如何为自定义列添加验证,并使用 Rails 提供的验证方法来验证自定义列的值。如果在模型中验证自定义列,可以增加应用的稳定性和可靠性,避免不合法的数据进入数据库。
完整代码请参考 Github。