Ruby on rails 如何添加否定现有行的rails验证

Ruby on rails 如何添加否定现有行的rails验证,ruby-on-rails,validation,database-integrity,Ruby On Rails,Validation,Database Integrity,我们有一个标准的电子邮件验证用户模型。需求改变了,说新的验证使用regexp检查格式,不允许在电子邮件中使用破折号 问题是,我如何避免检查系统中有破折号的现有用户(我们现在希望保持允许破折号) 如果我在模型上应用验证,在电子邮件字段验证之前,它不会让我在用户中保存任何其他字段 我如何解决这个问题?对于这种情况,最佳做法是什么?我可能会: validates :email, format: { with: <new_format_regex> }, if: email_changed?

我们有一个标准的电子邮件验证用户模型。需求改变了,说新的验证使用regexp检查格式,不允许在电子邮件中使用破折号

问题是,我如何避免检查系统中有破折号的现有用户(我们现在希望保持允许破折号)

如果我在模型上应用验证,在电子邮件字段验证之前,它不会让我在用户中保存任何其他字段

我如何解决这个问题?对于这种情况,最佳做法是什么?

我可能会:

validates :email, format: { with: <new_format_regex> }, if: email_changed?
验证:电子邮件,格式:{with:},如果:电子邮件已更改?

添加
if:email\u changed?
将仅在电子邮件更改时触发此验证。因此,它不会为现有用户触发,除非他们尝试更改密码,并且会为所有创建其帐户的新用户触发。

如果老用户想要更改电子邮件,会发生什么情况@如果你不想让老用户在新邮件中留下破折号,如果他们决定改变的话,BroiSatse的答案应该是好的。