我有一个自定义日期验证器,如下所示:
# app/validators/date_validator.rb
class DateValidator < ActiveModel::EachValidator
DATE_REGEX = /\d{2}\/\d{2}\/\d{4}/
def validate_each(record, attribute, value)
before_type_cast = "#{attribute}_before_type_cast"
raw_value = record.send(before_type_cast) if record.respond_to?(before_type_cast.to_sym)
raw_value ||= value
return if raw_value.blank?
record.errors[attribute] << (options[:message] || "must be in correct date format") if (raw_value =~ DATE_REGEX).nil?
end
end
在我的模型中,我使用带有以下代码的验证器:
validates :date_assigned :date => true
我的问题是,当用户输入无效日期时,我想在表单上显示无效日期,以便他们更正。但是目前,当我在表单上的日期分配字段中输入“11111”时,我相信rails类型转换将其转换为nil(date_assigned是DB中的日期值),因此不显示“11111”而是
如果用户输入“01/01/01”(每个日历正则表达式无效),则视图显示“0001-01-01”而不是原始(无效)字符串“01/01/01”。
有人可以帮我弄明白怎么做吗?感谢