![](/img/trans.png)
[英]Change date format in Rails validates_timeliness error messages
[英]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.