轨验证用户的电子邮件,只要它验证用户或更新电子邮件地址
-
16-09-2019 - |
题
我有一个用户模型,与通常的属性(如电子邮件和hashed_password等。我想写一个验证,检查是否存在一个电子邮件地址,但只有当
1)没有一个存储在数据库,用于这个目的(即这是一个新的用户签名)
2)用户是试图更新其电子邮件地址。
我目前验证
validates_presence_of :email
validates_presence_of :email_confirmation
validates_confirmation_of :email
显然是阻止我的任何更新的属性。我以为使用
validates_presence_of电子邮件:如果:email_validation_required?
def email_validation_required?
self.email.blank?
end
但是,这不会帮助方案2,因为它将返回正确的,因为用户不会有 密码 电子邮件地址的数据库。
我不能工作了,我怎么能限制它仅仅是这些方案2上。
任何人都可以帮忙吗?
解决方案
我认为EmFi是对的东西。但我不认为 validates_presence_of :email
应该保持你。的 email
应始终是本-如果它是空的形成的参数不会惹你保存的用户。如果是进入形式,即使对于更新时,它应该有一个 email_confirmation
沿。
试试这个:
validates_presence_of :email
validates_presence_of :email_confirmation, :if => :email_changed?
validates_confirmation_of :email
其他提示
你有两个选择。一种是使用 :on
.默认情况下,他们被设定为 :on => :save
, 但是你可以做像这样的东西这个
validates_presence_of :email, :on => :create
或
validates_presence_of :email, :on => :update
其他的选择是使用 :if
, ,然后通过在一个方法名称或proc.如此喜欢的东西
validates_presence_of :email, :if => :should_validate
或
validates_presence_of :email, :if => Proc.new { |user| user.signup_stage > 2 }
希望有助于:)
你想使用:如果条款在有效使用Email::肮脏的方法:
validates_presence_of :email, :if => Proc.new { |user| user.email_changed?}
N.B。只能在轨2.1或以后。
不隶属于 StackOverflow