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_time2000-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 は Time タイプであるため、String から Time に自動的にキャストされます。String 以外のデータ型に対して文字列形式の検証を行うべきではありません (常に として内部に格納されます2000-01-01 14:00:00 UTC)。

入力形式を検証する場合は、ビュー/コントローラー レベルでこれを行い、モデルの存在とstart_timeモデルend_time上で検証することをお勧めします。フォーマットを 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 に答える