Rails中的日期验证

时间:2011-04-14 14:56:25

标签: ruby-on-rails validation activerecord

我有一个Active Record模型,它包含两个属性:start_date和end_date。我该如何验证以下内容:

  1. 日期采用正确的(yyyy-mm-dd)格式
  2. 那个end_date>起始日期

2 个答案:

答案 0 :(得分:21)

它们存储的格式是否重要? Date对象是Date对象。您是将它存储在数据库的日期列中吗?

以下是我如何进行验证:

class MyModel < ActiveRecord::Base
  validate :validate_end_date_before_start_date

  def validate_end_date_before_start_date
    if end_date && start_date
      errors.add(:end_date, "Put error text here") if end_date < start_date
    end
  end
end

请记住,这不会检查无日期......如果可能的话,您可能想要这样做。

仅供参考,如果您希望能够接受各种格式,慢性病非常灵活。

答案 1 :(得分:1)

以下是如何进行日期验证:

How do I validate a date in rails?

看看日期是否大于另一个日期,您可以在日期对象上使用大于/小于运算符:

ruby-1.9.2-p136 :006 > d1 = Date.civil(2011, 05, 01)
 => #<Date: 2011-05-01 (4911365/2,0,2299161)> 
ruby-1.9.2-p136 :007 > d2 = Date.civil(2011, 01, 01)
 => #<Date: 2011-01-01 (4911125/2,0,2299161)> 
ruby-1.9.2-p136 :008 > d2 > d1
 => false 
ruby-1.9.2-p136 :009 > d2 < d1
 => true 

所以在你的例子中:

def validate_dates
  errors.add("Created at date", "is invalid.") unless convert_created_at
  errors.add("End Date" , "is invalid") if end_date > start_date
end