我希望我对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.我在验证语句的语法中错过了一些简单的东西吗?这是来自时效宝石的正常预期行为吗?我感谢你提出的任何意见。
答案 0 :(得分:0)
你需要这样的东西:
validate :future_date
def future_date
if open <= Time.now
errors.add(:override_schedule, "must be a future date / time")
end
end
可能不是您需要的逻辑,但这是语法。对第二次验证也这样做。