Validation 在Rails中,如何使用validates\u在比较的基础上验证两个日期属性?

Validation 在Rails中,如何使用validates\u在比较的基础上验证两个日期属性?,validation,date,ruby-on-rails-3.2,Validation,Date,Ruby On Rails 3.2,我试图验证两个日期属性,以便它们是连续的 gem非常适合验证不正确的日期,如2月31日 但是,我尝试使用:before和:after参数,但它不起作用。它接受2012年12月31日为开始日期,而结束日期设置为2012年1月1日 我的模型: class Meeting < ActiveRecord::Base attr_accessible :date_start, :date_end validates :date_start, :date_end, :presence =>

我试图验证两个日期属性,以便它们是连续的

gem非常适合验证不正确的日期,如2月31日

但是,我尝试使用:before:after参数,但它不起作用。它接受2012年12月31日为开始日期,而结束日期设置为2012年1月1日

我的模型:

class Meeting < ActiveRecord::Base
  attr_accessible :date_start, :date_end
  validates :date_start, :date_end, :presence => true

  # Ressource : https://github.com/adzap/validates_timeliness
  validates_date :date_start, :before => :date_end
  validates_date :date_end, :after => :date_start
end
my/config/initializers/validates_time.rb(有关信息):

请注意,如果我试图设置日期2月31日,我会收到一条错误消息,告诉我日期不正确。每次配置更改后,我都会重新启动服务器

====更新2=====

我甚至尝试了这个无效的hash_键,Rails没有抱怨:

  validates_date :date_start, :blablabla => lambda { Date.current }
发生了什么事?我做错了什么

====更新3=====

这似乎是一只虫子。 这两个选项确实有效:

  validates_date :date_start, :on_or_before => lambda { Date.current }
  validates_date :date_start, :on_or_after => lambda { Date.current }
这两个选项不起作用:

  validates_date :date_start, :before => lambda { Date.current }
  validates_date :date_start, :after => lambda { Date.current }
我使用的是Rails 3.2.9和Ruby 1.9.3p194


有人能证实他有同样的问题吗?

我没有用过这个宝石,但他们似乎支持lambda的价值观。尝试以下操作,将会议实例传递到lambda中,并将结果返回给验证方法。它必须在lambda中完成,因为它是特定于实例的

  validates_date :date_start, :before => lambda{|m| m.date_end}
  validates_date :date_end, :after => lambda{|m| m.date_start}

谢谢你的回答。好主意。我测试了你的代码,但不幸的是它不工作。我不知道lamda是如何工作的:doc说:时间限制可以采用4种不同的值类型:1)Date、Time或DateTime对象值。2) Proc或lambda对象,该对象可能采用作为记录对象的可选参数。3) 与模型中的方法名称匹配的符号。4) 字符串值。将属性值与时间限制进行比较时,它们将作为与验证方法类型相同的类型进行比较。因此,使用validates_date意味着将所有值作为日期进行比较。那有帮助吗?很有趣。根据这一点#2和#3(您的原始代码)应该都能工作。是的,我会在git的validates\u库中报告这一点。谢谢
  validates_date :date_start, :before => lambda { Date.current }
  validates_date :date_start, :after => lambda { Date.current }
  validates_date :date_start, :before => lambda{|m| m.date_end}
  validates_date :date_end, :after => lambda{|m| m.date_start}