1

私のpostgreデータベーステーブルはでセットアップされました

t.integer :time_employed

私はそのような検証をしました

validates :time_employed, numericality: true, allow_blank: true

そして私も試しました

validates_numericality_of :time_employed, allow_blank: true

しかし、どちらも私が探していた結果をもたらしませんでした。コンソールでいくつかのテストを行ったところ、フィールドは常に0またはに設定されているようでしnilた。文字列を入力すると、に設定されていました0

データベースフィールドをに変更しました

t.string :time_employed

そして今、すべてが正常に機能します。それは大きな問題ではありませんが、スキーマによってデータが正しく記述されていることを望んでいました。

私はまだデータベースについてあまり知らないので、これでループに陥りました。ここで何が起こっているのか誰でも説明できますか?

編集:

問題は、空白のエントリを許可することでしたが、数値以外を入力してもエラーにはなりませんでした。DBに保存されないだけで、何でも良いと検証されます。t.string検証に変更し、変更を加えなかった後、正常に機能しました。

私も試しallow_nil: trueましたが同じ効果でした。

4

2 に答える 2

1

これを交換

validates_numericality_of :time_employed, allow_blank: true

validates_numericality_of :time_employed, allow_nil: true

allow_blankがAPI ドキュメントに存在しないことが原因の 1 つかもしれません。

于 2013-01-25T07:36:04.807 に答える
0

time_employed検証前に列が型キャストされるためです。

validates_numericality_of :time_employed_before_type_cast, allow_blank: true

動作するはずです。

于 2014-09-10T08:52:31.177 に答える