如何在Rails模型中验证两个值是否彼此不相等?

26 validation model ruby-on-rails

我有一个用户模型,它有一个电子邮件和一个密码字段.为安全起见,这些可能并不相同.如何在我的模型中定义它?

kle*_*lew 29

创建自定义validataion:

validate :check_email_and_password

def check_email_and_password
  errors.add(:password, "can't be the same as email") if email == password
end
Run Code Online (Sandbox Code Playgroud)

但请记住,将密码存储为纯文本是个坏主意.你应该把它存储起来.尝试一些身份验证插件,如authlogicRestful身份验证.


hlc*_*lcs 11

新方法:

validates :password, exclusion: { in: lambda{ |user| [user.email] } }
Run Code Online (Sandbox Code Playgroud)

要么:

validates :password, exclusion: { in: ->(user) { [user.email] } }
Run Code Online (Sandbox Code Playgroud)


Joh*_*lla 6

您可以使用自定义验证方法来检查此问题.

class User < ActiveRecord::Base
  # ...

  def validate
    if (self.email == self.password)
      errors.add(:password, "password cannot equal email")
      errors.add(:email, "email cannot equal password")
    end
  end
end
Run Code Online (Sandbox Code Playgroud)