即使字段没有改变,每次保存对象时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
你的问题到底是什么?重刑?你只是在寻找唯一性验证始终运行的确认吗? –
是的。如果这个领域没有改变,我的意思是。如果是这样,就不应该争论UniquenessValidator是否应该固有知道何时运行验证。如果字段没有改变,那么在数据库上运行一个相当昂贵,不必要的请求? –
第二个看起来更加灵活,并且在对象没有改变时帮助防止不必要的验证,但就正常的验证而言,每次将数据保存在数据库中时都必须运行它,这一小部分开销将会运行确保数据始终保持有效和正确的很长的一段路... –