Ruby on rails User.save backing-as:User Exists=>False

Ruby on rails User.save backing-as:User Exists=>False,ruby-on-rails,Ruby On Rails,我创建了一个用户,然后转到user.save,得到这个=>错误消息。。。我看到它说用户存在,但当我转到users=user.all时,只有一个我不久前创建的用户出现。那么为什么说这个用户存在呢 irb(main):003:0> user = User.new(:screen_name => "jeff holmes", :email => "jeffholmes@gmail.com", :password => "123456") /Users/coreyholmes/R

我创建了一个用户,然后转到user.save,得到这个=>错误消息。。。我看到它说用户存在,但当我转到users=user.all时,只有一个我不久前创建的用户出现。那么为什么说这个用户存在呢

irb(main):003:0> user = User.new(:screen_name => "jeff holmes", :email => "jeffholmes@gmail.com", :password => "123456")
/Users/coreyholmes/RubymineProjects/worklink/app/models/user.rb:22: warning: regular expression has ']' without escape: /\A[A-Z0-9._%-]+@(A-Z0-9-]+\.)+[A-Z]{2,4}\z/
=> #<User id: nil, screen_name: "jeff holmes", email: "jeffholmes@gmail.com", password: "123456">
irb(main):004:0> user.save
   (0.2ms)  BEGIN
  User Exists (0.3ms)  SELECT  1 AS one FROM `users` WHERE `users`.`screen_name` = BINARY 'jeff holmes' LIMIT 1
  User Exists (0.2ms)  SELECT  1 AS one FROM `users` WHERE `users`.`email` = BINARY 'jeffholmes@gmail.com' LIMIT 1
/Users/coreyholmes/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activemodel-4.2.1/lib/active_model/validations/format.rb:8: warning: regular expression has ']' without escape: /\A[A-Z0-9._%-]+@(A-Z0-9-]+\.)+[A-Z]{2,4}\z/
   (0.1ms)  ROLLBACK
=> false
更新 这是验证代码

class User < ActiveRecord::Base

  # Max and min lengths for all fields
  SCREEN_NAME_MIN_LENGTH = 4
  SCREEN_NAME_MAX_LENGTH = 20
  PASSWORD_MIN_LENGTH = 4
  PASSWORD_MAX_LENGTH = 20
  EMAIL_MAX_LENGTH = 50
  SCREEN_NAME_RANGE = SCREEN_NAME_MIN_LENGTH...SCREEN_NAME_MAX_LENGTH
  PASSWORD_RANGE = PASSWORD_MIN_LENGTH...PASSWORD_MAX_LENGTH

  validates_uniqueness_of :screen_name, :email
  validates_length_of :screen_name, :within => SCREEN_NAME_RANGE
  validates_length_of :password, :within => PASSWORD_RANGE
  validates_length_of :email, :maximum => EMAIL_MAX_LENGTH

  validates_format_of :screen_name,
      :with => /\A[A-Z0-9_]*\z/,
      :message => 'must contain only letters, ' + 'numbers, and underscores'

  validates_format_of :email,
      :with => /\A[A-Z0-9._%-]+@(A-Z0-9-+\.)+[A-Z]{2,4}\z/,
      :message => 'common... enter a real email address'

end

我怀疑这是问题的一部分:

/\A[A-Z0-9._%-]+@(A-Z0-9-]+\.)+[A-Z]{2,4}\z/
#                ↑
#   Is this supposed to be "(["?

另外,这也是验证电子邮件地址的错误正则表达式。首先,现在有很多TLD超过四个字符。

可能的重复验证表明,其中一个正则表达式的格式不正确,缺少右括号。如果你不明白的话,就跟着这个错误发代码。我不知道怎么跟着这个错误,因为我不知道这个错误是什么。我应该发布什么代码?您的用户模型中有哪些验证?我添加了验证是问题的一部分。我把它改成这个,它帮助了部分错误/\A[A-Z0-9.\%-]+@A-Z0-9-+\.+[A-Z]{2,4}\Z/,我想你想要的东西更像:/\A[A-Z0-9.\%-]+@[A-Z0-9-]+\.+[A-Z]{2,4}\Z/还有大写字符是什么?这绝对不正确,@CoreyHolmes。字符类周围需要方括号。我已经更新了我的答案,因为我意识到答案是正确的,但是缺少了[1]。在我正在阅读的书中,它的开头是/^,结尾是*$/I。但是我将它改为/\A和\z/。它是否应该是大写字符?您需要I标志来指示不区分大小写的匹配。