validates_uniqueness_of:some_field属性が変更されていなくても(他のフィールドが変更された場合でも)some_fieldは「保存」で実行されるようです。各validates_uniqueness_ofはデータベース呼び出しを必要とするため、これは無駄に思えます。私は、some_fieldが変更されたかどうかを確認するためにProcをvalidates_uniqueness_ofに渡すことができることを知っています。そして、可能な限り、すべてのバリデーションを検討しています。私が疑問に思うのは:Railsは変更されていない属性を検証するのはなぜですか?
1)パフォーマンスに関心のある人は、一般的にその検証に関して何をしていますか?
2)属性が最初に変更されたかどうかを確認するために、validates_uniqueness_ofのデフォルト動作ではないのはなぜですか?
3)変更されていない属性に対してこのような検証を実行する理由はありますか?
私はRails 2.3を使用しています(現時点では、アップグレードを進めています)。私はこれがRails 3の同じ状況だとは知らない。
2と3については、Railsアプリケーションの外部で値をデータベースに入れることができます。したがって、別のアプリによって追加された値によって、変更されていない属性が無効になる可能性があります。さらに、検証は時間とともに進化し、変更されていない属性を無効にすることができます。 – niiru
@niiru:お返事いただきありがとうございます。ユーザーの観点から見ると、レコードの一部を編集して、レコードの別の部分が無効であり、編集されておらず、変更から論理的に独立していると伝えられます。また、あなたのシナリオで、レールアプリがフィールド上で一意性を強制している場合、他のアプリケーションも同じことをしてはいけませんか? –
間違いなく!しかし、いくつかのアプリケーションに縛られているデータベースで作業している可能性があります。そのすべてがアプリケーションのデータ検証に責任があるわけではありません。 – niiru