重写Rails验证条件

时间:2014-01-03 20:04:23

标签: ruby-on-rails validation

我们有一个用户模型,其中包含一个特定部分,用于更新用户的邮箱,该邮箱必须是唯一的。我将此作为验证添加,但是当用户在其他任何地方更新其配置文件时会抛出错误,例如密码重置等。

我不知道该怎么问,但是如果邮箱不是空的,那么我需要重新修改if条件才能使用此验证。如果有人看到过这种情况并能提供任何见解,我们将不胜感激。

validates_uniqueness_of :rss_mailbox, on: :update, if: -> user { user.rss_mailbox.presence }
validates :mailbox, exclusion: { in: :reserved_names, message: " %{value} is a reserved mailbox" }, on: :update, if: -> user { user.mailbox }

1 个答案:

答案 0 :(得分:1)

首先,我从未见过以前用过符号的:in选项,所以我不确定它是否有效。我没有看到相关文档,但这不是Rails中的第一个“隐藏功能”。我相信你的确有效。

当邮箱更改且邮箱存在时,您只需要运行此验证:

validates :mailbox, exclusion: { in: :reserved_names, message: " %{value} is a reserved mailbox" }, on: :update, if: -> user { user.mailbox && user.mailbox_changed? }