1

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

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

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

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

使用的身份验证:

  • 可以可以
  • 设计
  • 设计邀请

更新:

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

更新 2:

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

更新 3:

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

4

3 回答 3

9

应该能够做到这一点scope,通过设计添加到默认验证。

对于 Rails 3 版本:

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

参考:

于 2012-10-19T17:05:40.797 回答
0

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

  config.validate_on_invite = true

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

于 2012-10-19T20:07:54.703 回答
0

该代码在 Rails 3.2.8 上运行良好。我已经对其进行了测试...

可能你的宝石有问题...

于 2012-10-20T06:14:45.620 回答