Rails中的日期验证

Kev*_*ang 7 validation activerecord ruby-on-rails

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

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

bre*_*ish 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
Run Code Online (Sandbox Code Playgroud)

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

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


Mik*_*wis 1

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

如何验证 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 
Run Code Online (Sandbox Code Playgroud)

所以在你的例子中:

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
Run Code Online (Sandbox Code Playgroud)