1

我创建了一个对时间进行严格输入验证的应用程序。您必须使用以下格式输入时间:14:00

这很好用,但是当我使用 factory-girl 创建工厂时,对于我的测试,验证失败,我可以看到 factory-girl 尝试使用以下数据创建它们:2000-01-01 14:00:00 UTC

这是我的工厂:

factory :stamp do
  end_time "14:00"
end

因此,当我运行FactoryGirl.create(:stamp) FG 尝试将end_time设置为:2000-01-01 14:00:00 UTC 时,我的验证失败。

这是我的验证方法:

validates :start_time, :end_time, :format => { :with => /[0-2][0-3]:[0-5][0-9]/,
                                   :message => "You have to enter a time in this format 14:00"

如何让 FactoryGirl 创建模型而不篡改时间数据和验证失败?

4

2 回答 2

2

根据您的输出,end_time 是一种时间类型,因此它将自动从字符串转换为时间。您不应该对非字符串数据类型进行字符串格式验证(它总是在内部存储为2000-01-01 14:00:00 UTC)。

如果要验证输入格式,我建议在视图/控制器级别执行此操作,并验证模型的存在start_timeend_time。如果格式无法正确转换为时间,ActiveRecord 将在创建或保存时抛出错误。

于 2013-05-09T15:59:15.677 回答
1

您可以尝试为 end_time 强制使用 FactoryGirl 格式:

factory :stamp do
  end_time Time.new(2013,1,1,14,0,0).strftime("%H:%M")
end

strftime("%H:%M")将时间转换为您要查找的格式

于 2013-05-09T16:04:08.907 回答