我有一个Active Record模型,它包含两个属性:start_date和end_date。我该如何验证以下内容:
答案 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