验证两列的唯一性

时间:2012-10-19 16:28:47

标签: ruby ruby-on-rails-3 devise

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

validates :login, :uniqueness=>true
validates :email, :uniqueness=>true

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

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

使用的身份验证:

  • 惭惭
  • 设计
  • 设计不受欢迎

更新

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

更新2:

从Devise中删除validatable模块将导致既不检查唯一性。

更新3:

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

3 个答案:

答案 0 :(得分:9)

应该可以使用scope执行此操作,并通过设计添加默认验证。

对于Rails 3版本:

validates :email, :uniqueness => {:scope => :login}

价:

答案 1 :(得分:0)

问题在于devise_invitable gem。在设计初始化程序中,我必须设置

  config.validate_on_invite = true

要确保执行验证,默认值为false。我还必须删除设计验证模块。

答案 2 :(得分:0)

代码在Rails 3.2.8上运行得非常好。我已经测试了它......

也许你的宝石存在一些问题......