1

検証をテストしているときに、この特異性に遭遇しました。移行は次のように定義されています。

create_table :time_windows do |t|
  t.datetime :window_begin, :null => true
  t.datetime :window_end, :null => true
end

irbで

>> t = TimeWindow.new({:window_begin  => Time.now, :window_end => "not a time"})
=> #<TimeWindow id: nil, window_begin: "2010-07-29 15:54:07", window_end: nil>

私の質問は、ActiveRecord が単に :window_end = "not a time" を設定するのではなく、"not a time" を nil と解釈するのはなぜですか? :window_end を int に設定すると、同じ nil への変換が発生します。

これが私にとって問題である理由は、誰かが Time 以外の値を :window_end (または :window_start) 列に保存しようとすると、エラーがスローされるようにしたいのですが、ここではそうではありません。

ありがとう。

4

1 に答える 1

1

まず、データベースは日時列に文字列を保存できません。第二に、Rails は "not a time" を nil と解釈します。これは、時間の値がない、つまり nil を持っているためです。

最後に、入力を検証するのはあなたの責任です。次のようなことができます: rails built in datetime validation

于 2010-07-29T16:28:26.740 に答える