Rails:日期验证具有及时性但没有错误消息

时间:2014-10-09 16:11:30

标签: ruby-on-rails validation datetime

我希望我对Rails缺乏经验是其他人似乎没有遇到这个问题的原因,并且这是一个简单的答案。但此刻,我很难过。快速和肮脏的是我有一个代表每日时间表的模型(按日期打开和关闭的时间)。在寻找验证这些日期时间属性的方法时,我遇到了几个线程,建议使用我已经完成的validates_timeliness gem。我编写了一些简单的单元测试来检查我希望我的对象遵守的规则,虽然新的验证似乎有效,但它并没有在ActiveModel对象的错误集合中添加任何内容。 / p>

模型片段:

class OverrideSchedule < ActiveRecord::Base
  validates :close, :open, :schedule_id, presence: true
  validates_datetime :open, :after => lambda { DateTime.now }, :after_message => "must be a future date / time"
  validates_datetime :close, :after => :open, :after_message => "must be after the open date / time"  
  attr_accessible :close, :open, :schedule_id
end

单元测试代码段:

test "open time must be in the future" do
  assert past_override_schedule.invalid? #<--- This assert succeeds
  assert past_override_schedule.errors[:open].any? #<--- This assert fails
end

test "close time must be after open time" do
  assert close_before_open_override_schedule.invalid? #<--- This assert succeeds
  assert close_before_open_override_schedule.errors[:close].any? #<--- This assert fails
end

我检查了.errors集合,在我的单元测试中放入任何键和大小。没有键,大小总是0.我在验证语句的语法中错过了一些简单的东西吗?这是来自时效宝石的正常预期行为吗?我感谢你提出的任何意见。

1 个答案:

答案 0 :(得分:0)

你需要这样的东西:

validate :future_date



def future_date
  if open <= Time.now
    errors.add(:override_schedule, "must be a future date / time")
  end
end

可能不是您需要的逻辑,但这是语法。对第二次验证也这样做。