1

validates :uniquenessフィールドが変更されていなくても、オブジェクトが保存されるたびに呼び出されますか? これはパフォーマンスの問題ではありませんか?

validates :name, :schedule_id, :uniqueness => true

そうなる場合もあるようです。バリデーションを実行する前に、変更が行われたことを確認することはほとんどの場合必要ではないでしょうか? 一意性をチェックするすべてのフィールドには、データベース ヒットが必要です。

これはより良いでしょう:

validates :name, :schedule_id, :uniqueness => true, :if => "name_changed? || schedule_id_changed?"

もう少し冗長であれば、これははるかに優れています。

validates :name, :uniqueness => true, :if => :name_changed?
validates :schedule_id, :uniqueness => true, :if => schedule_id_changed?

ここの要点: https://gist.github.com/4017019

4

1 に答える 1

1

これを試して

   validates :name, :uniqueness => true, :if => lambda {self.name_changed? }
于 2012-11-05T12:50:45.687 に答える