3

Rails のモデルに :presence と :uniqueness の検証を追加したいと考えています。MongoDB と Mongoid gem を使用しています。

既に使用されているモデルがあり、DB に既存のレコードがあります。新しい :field を追加してから、フィールドの :presence と :uniqueness の検証を追加したいと思います。

デフォルトでは、既存のレコードはすべて :field を追加するだけで、:default を指定しない限り、結果は null になることがわかっています。

私の質問は、この新しい :field を一意にしたいので、これにより DB 内の既存のレコードが null になるエラーが発生するのでしょうか? これらのレコードは失われますか?それとも、Rails は新しいレコードに検証を適用するだけですか?

4

1 に答える 1

2

Rails/ ActiveRecordは古いレコードを無視したり削除したりしません...

検証は次のように機能します。データベースに何かを書き込もうとするとき、たとえば新しいレコードを作成するときやレコードを更新するときにのみ使用/チェックされます。したがって、新しい必須フィールドを追加せずに古いレコードを更新しようとすると、検証エラーが発生します。

新しいフィールドを追加するときは、データベースをクリーンアップすることをお勧めします (新しい必須フィールドの古いレコードに適切なデフォルトを追加することを意味します)。

于 2012-09-17T16:14:54.123 に答える