当内建的校验 helpers 不能满足项目需求时,可以根据具体需求来编写自己的校验器或者校验方法。
其中,当有比较通用的规则需要校验时,优先考虑使用自定义校验器.
自定义校验器
给需要校验的单独属性添加自定义校验器最便捷的方法是使用 ActiveModel::EachCalidator。这种情况下,自定义校验类必须实现一个 validate_each 方法,它接受三个参数:record,attribute 和 value,它们分别代表model对象实例,被校验的属性和被校验属性的值。
class DateValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
if options[:after]
unless record[options[:after]] < value
record.errors[attribute] << options[:after_message]
end
end
if options[:before]