我正在尝试验证我的用户模型中两列是唯一的。我搜索了谷歌,根据我的理解,下面的代码不起作用:
validates :login, :uniqueness=>true
validates :email, :uniqueness=>true
在我的情况下这样做会验证电子邮件的唯一性,但不会验证登录的唯一性。我设置登录必须在数据库上是唯一的。但是,如果它已经存在,那么所有这一切都会产生运行时错误。我不希望生产中出现这个错误,因为它会导致500内部服务器错误,用户不会理解。
关于如何验证这两个领域的唯一性的任何想法?
使用的身份验证:
更新
据我所知,问题是由Devise引起的,特别是验证电子邮件和密码的验证模块。
更新2:
从Devise中删除validatable模块将导致既不检查唯一性。
更新3:
似乎设计不会导致问题。相反,一个名为Devise Invitable的宝石就是。删除此gem会导致验证被触发。此宝石似乎也试图强制验证电子邮件字段。由于这个宝石的性质,它是有道理的,但不应该阻止。
答案 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上运行得非常好。我已经测试了它......
也许你的宝石存在一些问题......