繁体   English   中英

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

[英]Rails: Date validation with timeliness but no error messages

我希望我对Rails的缺乏经验是没有其他人似乎遇到此问题的原因,并且有一个简单的答案。 不过此刻,我很困惑。 简单地说,我有一个代表每日时间表的模型(按日期打开和关闭时间)。 当寻找一种验证这些日期时间属性的方法时,我在这里遇到了多个线程,这些线程建议使用已经完成的validates_timeliness gem。 我编写了一些简单的单元测试,以检查我希望对象遵循的规则,尽管新的验证方法似乎可以正常工作,但它并未在ActiveModel对象的错误集合中添加任何内容。

模型片段:

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

我在单元测试中放入了puts来检查.errors集合中的任何键和大小。 没有键,大小始终为0。我是否错过了验证语句语法中的简单内容? 这是正常性宝石的正常预期行为吗? 感谢您提供的任何信息。

您需要这样的东西:

validate :future_date



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

可能不完全是您需要的逻辑,但这是语法。 对第二次验证执行相同的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM