Ruby on rails 为什么Rails控制台告诉我不存在记录,但我不能创建记录,因为它存在?

Ruby on rails 为什么Rails控制台告诉我不存在记录,但我不能创建记录,因为它存在?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,这是最奇怪的事情: > User.count (74.7ms) SELECT COUNT(*) FROM "users" => 0 2.0.0p0 :002 > User => User(id: integer, email: string, encrypted_password: string, reset_password_token: string, reset_password_sent_at: datetime, remember_created

这是最奇怪的事情:

> User.count
   (74.7ms)  SELECT COUNT(*) FROM "users" 
 => 0 
2.0.0p0 :002 > User
 => User(id: integer, email: string, encrypted_password: string, reset_password_token: string, reset_password_sent_at: datetime, remember_created_at: datetime, sign_in_count: integer, current_sign_in_at: datetime, last_sign_in_at: datetime, current_sign_in_ip: string, last_sign_in_ip: string, created_at: datetime, updated_at: datetime, name: string, confirmation_token: string, confirmed_at: datetime, confirmation_sent_at: datetime, unconfirmed_email: string) 
2.0.0p0 :003 > User.create(email: "abc@test.com", password: "test123", password_confirmation: "test123")
   (140.0ms)  BEGIN
  User Exists (543.7ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = 'abc@test.com' LIMIT 1
   (0.3ms)  ROLLBACK
 => #<User id: nil, email: "abc@test.com", encrypted_password: "$2a$10$s7Ak0w04l3UixRqZbuvrJeLJb/AGD4FxQudSqcvYzDll...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: nil, updated_at: nil, name: nil, confirmation_token: nil, confirmed_at: nil, confirmation_sent_at: nil, unconfirmed_email: nil> 
2.0.0p0 :004 > User.all
  User Load (30.4ms)  SELECT "users".* FROM "users" 
 => [] 
> User.where(:email => "abc@test.com")
  User Load (24.8ms)  SELECT "users".* FROM "users" WHERE "users"."email" = 'abc@test.com'
 => [] 
编辑2

根据@whit kimmey的建议,我刚刚尝试了另一件事:

> User.create!({email: "abc@test.com", password: "test123", password_confirmation: "test123"}, without_protection: true)
   (1.3ms)  BEGIN
  User Exists (105.5ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = 'abc@test.com' LIMIT 1
   (0.3ms)  ROLLBACK
ActiveRecord::RecordInvalid: Validation failed: Password is too short (minimum is 8 characters)
编辑3

所以,如果我把pw8的字符,它似乎工作-这是奇怪的。但这仍然不能回答为什么它说拥有该电子邮件地址的用户已经存在

> User.create!({email: "abc@test.com", password: "test-123", password_confirmation: "test-123"}, without_protection: true)
   (0.2ms)  BEGIN
  User Exists (31.2ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = 'abc@test.com' LIMIT 1
  User Load (19.7ms)  SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = 'EZUGZPp8oEHMPSvExrgX' LIMIT 1
  SQL (742.6ms)  INSERT INTO "users" ("confirmation_sent_at", "confirmation_token", "confirmed_at", "created_at", "current_sign_in_at", "current_sign_in_ip", "email", "encrypted_password", "last_sign_in_at", "last_sign_in_ip", "name", "remember_created_at", "reset_password_sent_at", "reset_password_token", "sign_in_count", "unconfirmed_email", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17) RETURNING "id"  [["confirmation_sent_at", Fri, 03 May 2013 17:47:43 UTC +00:00], ["confirmation_token", "EZUGZPp8oEHMPSvExrgX"], ["confirmed_at", nil], ["created_at", Fri, 03 May 2013 17:47:43 UTC +00:00], ["current_sign_in_at", nil], ["current_sign_in_ip", nil], ["email", "abc@test.com"], ["encrypted_password", "$2a$10$0VoGOKvWXhfpOVrut6S6QeM1lkPgOYfq9s4Oo6zg.VMHZoJWTbc8G"], ["last_sign_in_at", nil], ["last_sign_in_ip", nil], ["name", nil], ["remember_created_at", nil], ["reset_password_sent_at", nil], ["reset_password_token", nil], ["sign_in_count", 0], ["unconfirmed_email", nil], ["updated_at", Fri, 03 May 2013 17:47:43 UTC +00:00]]
   (116.5ms)  COMMIT
 => #<User id: 1, email: "abc@test.com", encrypted_password: "$2a$10$0VoGOKvWXhfpOVrut6S6QeM1lkPgOYfq9s4Oo6zg.VMH...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2013-05-03 17:47:43", updated_at: "2013-05-03 17:47:43", name: nil, confirmation_token: "EZUGZPp8oEHMPSvExrgX", confirmed_at: nil, confirmation_sent_at: "2013-05-03 17:47:43", unconfirmed_email: nil> 
2.0.0p0 :008 > 

检查验证。您可能正在验证名称或某些其他属性。

检查验证。您可能正在验证名称或某些其他属性。

Rails正在执行该查询,以查看此用户aleady是否存在;这并不意味着它找到了一个。您可以在控制台输出中看到Rails正在执行的查询,但是这个特定的查询没有找到以前存在的用户,也没有导致任何问题

试试这个:

User.create!({email: "abc@test.com", password: "test123", password_confirmation: "test123"}, without_protection: true)
使用创建!而不是创建将帮助我们看到ActiveRecord所得到的错误。在没有_保护的情况下使用只会绕过质量分配保护,以防出现问题


您的结果表明您的一个gem密码长度验证失败。将密码更改为8个字符将解决此问题。

Rails正在执行该查询以查看此用户aleady是否存在;这并不意味着它找到了一个。您可以在控制台输出中看到Rails正在执行的查询,但是这个特定的查询没有找到以前存在的用户,也没有导致任何问题

试试这个:

User.create!({email: "abc@test.com", password: "test123", password_confirmation: "test123"}, without_protection: true)
使用创建!而不是创建将帮助我们看到ActiveRecord所得到的错误。在没有_保护的情况下使用只会绕过质量分配保护,以防出现问题


您的结果表明您的一个gem密码长度验证失败。将密码更改为8个字符将解决此问题。

这并不是说用户在任何地方都存在,您只是查看ActiveRecord执行的查询以了解用户是否存在。如果要获取实际错误,请尝试以下操作:

> user = User.new(email: "abc@test.com", password: "test123", password_confirmation: "test123")
> user.valid?
> user.errors.full_messages

它并没有说用户存在于任何地方,您只是查看ActiveRecord执行的查询,以了解用户是否存在。如果要获取实际错误,请尝试以下操作:

> user = User.new(email: "abc@test.com", password: "test123", password_confirmation: "test123")
> user.valid?
> user.errors.full_messages

您可以发布用户模型代码吗?这并不奇怪,因为如果您查看第0.3ms ROLLBACK行,事务将回滚。可能已发出一些验证。您还可以在保存前/创建前尝试重新加载控制台。你能发布你的错误吗?和u.valid?这是一个全新的控制台会话-在重新启动我的机器之后。你能发布用户模型代码吗?这并不奇怪,因为如果你看0.3ms ROLLBACK行,事务被回滚。可能已发出一些验证。您还可以在保存前/创建前尝试重新加载控制台。你能发布你的错误吗?u.valid?这是一个全新的控制台会话-在重新启动我的机器之后。即使是这样,也不是…我的用户模型上没有任何验证,为什么它会说User.count=0,但当我尝试创建记录时,它会说它存在?即使是这样,也不是…我的用户模型上没有任何验证,为什么它会说User.count=0,但当我尝试创建记录时,它会说它存在?您发布的结果表明您的验证失败,因为您的密码必须是8个字符,而且只有6个字符。尝试为用户提供八个字符的密码和匹配的密码确认。您发布的结果表明验证失败,因为您的密码要求为八个字符,并且只有六个字符。请尝试为用户提供八个字符的密码和匹配的密码确认。