Rails中的模型日期验证

时间:2015-08-16 19:56:47

标签: ruby-on-rails ruby

我正在构建日历应用,并且在日期验证方面存在一些问题。我想允许用户只制作未来的活动。添加自定义验证器后

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。我的错是什么?

3 个答案:

答案 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

您还可以查看:https://github.com/johncarney/validates_timeliness

答案 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