验证两列的唯一性

Tra*_*tto 1 ruby devise ruby-on-rails-3

我试图验证我的用户模型中两列是唯一的.我搜索了谷歌,根据我的理解,下面的代码不起作用:

validates :login, :uniqueness=>true
validates :email, :uniqueness=>true
Run Code Online (Sandbox Code Playgroud)

在我的情况下,这样做将验证电子邮件的唯一性,但不会验证登录的唯一性.我设置登录必须在数据库上是唯一的.但是,如果它已经存在,那么所有这一切都会产生运行时错误.我不希望生产中出现错误,因为它会导致500内部服务器错误,用户不会理解.

关于如何验证这两个领域的独特性的任何想法?

使用认证:

  • 可以可以
  • 设计
  • 设计无敌

更新:

据我所知,问题是由Devise引起的,特别是验证电子邮件和密码的可验证模块.

更新2:

从Devise中删除可验证模块将导致既不检查唯一性.

更新3:

似乎设计不会导致问题.相反,一个名为Devise Invitable的宝石就是.删除此gem会导致验证被触发.此宝石似乎也试图强制验证电子邮件字段.由于这个宝石的性质,它是有道理的,但不应该阻止.

Pra*_*thy 9

应该可以使用scope,通过设计添加到默认验证.

对于Rails 3版本:

validates :email, :uniqueness => {:scope => :login}
Run Code Online (Sandbox Code Playgroud)

参考: