たとえば、最近、ユーザー モデルに「住所」フィールドを追加しました。それらは存在によって検証されています。そのため、たとえば電子メールなどの別の属性を更新しようとすると、無効なフィールドがあるためユーザーを保存できません (アドレスはまだ空白です)。
空の文字列などでデータを移行する必要がありますか?
これを処理するRailsの方法は何ですか?
たとえば、最近、ユーザー モデルに「住所」フィールドを追加しました。それらは存在によって検証されています。そのため、たとえば電子メールなどの別の属性を更新しようとすると、無効なフィールドがあるためユーザーを保存できません (アドレスはまだ空白です)。
空の文字列などでデータを移行する必要がありますか?
これを処理するRailsの方法は何ですか?
これを処理する 1 つの方法は、それを作成する移行で新しいフィールドを設定することです。そうすれば、データベース内のすべてがモデルに従って有効であることを確認できます。このガイドには、これを行うためのヒントがいくつかあります。いくつかの落とし穴があります。
もう 1 つの方法は、:on
オプションを使用して、検証が更新ではなく作成時にのみ実行されるように指定することです。それは次のようになります。
validates :address, :presence => true, :on => :create
そうすれば、新しいユーザーにはアドレスを設定する必要がありますが、既存のユーザーの他の属性を編集することはできます。
新しいフィールドを追加して検証を行うたびに、移行を行うことをお勧めします。これにより、データの整合性と一貫性が維持されます。
本当にトリックを実行したい場合は、検証に条件を追加し、保存時に条件付きで "validate: false" を配置し、既存のレコードを変更するときに住所フィールドに空白の値を追加するなど、すべて使用できるトリックです。
また、住所を追加するときは、モデルにフィールドを追加するだけでなく、住所モデルを作成し、それを必要とする他のモデルと共有することをお勧めします。これにより、検証がより柔軟になります。