在Rails中显示Date的无效值

时间:2015-05-12 03:04:22

标签: ruby-on-rails ruby validation date ruby-on-rails-4

我有一个自定义日期验证器,如下所示:

# 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”。

有人可以帮我弄明白怎么做吗?感谢

0 个答案:

没有答案