Kev*_*ang 7 validation activerecord ruby-on-rails
我有一个Active Record模型,它包含两个属性:start_date和end_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)
请记住,这不会检查无日期...如果可能的话,您可能想要.
仅供参考,如果您希望能够接受各种格式,慢性病非常灵活.
以下是如何进行日期验证:
要查看一个日期是否大于另一个日期,您可以在日期对象上使用大于/小于运算符:
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)
归档时间: |
|
查看次数: |
7068 次 |
最近记录: |