我正在构建日历应用,并且在日期验证方面存在一些问题。我想允许用户只制作未来的活动。添加自定义验证器后
class Event < ActiveRecord::Base
belongs_to :user
validates :name, presence: true
validates :date, presence: true
validate :future_event
private
def future_event
errors.add(:date, "Can't be in the past!") if Date.parse(date) < Time.now
end
end
这是params debug
event: !ruby/hash:ActionController::Parameters
name: New
date: 08/17/2015
commit: Add
controller: events
action: create
我得到一个错误:没有将nil隐式转换为String。我的错是什么?
答案 0 :(得分:1)
Date.parse()
需要一个如here所示的字符串。如果您以适当的格式保存了:date
,那么您应该可以
date < Time.now
答案 1 :(得分:0)
试试这个:
def future_event
errors.add(:date, "Can't be in the past!") if !date.blank? && Date.parse(date) < Time.now
end
答案 2 :(得分:0)
查看http://rubyquicktips.com/post/527621930/check-if-a-time-or-date-is-in-the-past-or-future
time = 2.hours.ago
time.past? #true
time.future? #false