当涉及到比较日期时,由于某种原因,我的大脑真的很挣扎。我总是把< 和>= 混为一谈,最后把它们翻过来。
start_date 大于end_date 吗?或者反过来?我感到困惑,因为我认为日期是指before 和after ,而不是greater_than 或less_than 。
使用方法
幸运的是,Rails在这里拯救了我,通过为所有与日期相关的比较添加before? 和after? ,确保我不再犯这种错误:
start_date = Date.new(2019, 3, 31)
end_date = Date.new(2019, 4, 1)
start_date.before? end_date
#=> true
end_date.after? start_date
#=> true
start_date = Date.new(2020, 8, 11)
end_date = Date.new(2018, 8, 11)
start_date.before? end_date
#=> false
我发现自己在Rails模型验证中经常使用这些方法,当我需要确保两个日期形成一个有效范围时:
class Promotion < ApplicationRecord
validate :valid_eligiblity_range?
def valid_eligiblity_range?
return unless expiration_date? && start_date?
if !expiration_date.after?(start_date)
errors.add(:start_date, "must be before Expiration Date")
errors.add(:expiration_date, "must be after Start Date")
end
end
end