数据没有进入sqlite数据库 - Ruby on Rails

Tes*_*est 7 ruby-on-rails

我正在运行"rails console",然后执行以下命令:

 User.create(name:"John", email:"test@email.com", password:"foo", password_confirmation:"foo")
Run Code Online (Sandbox Code Playgroud)

我得到这个:

   (0.1ms)  begin transaction
  User Exists (0.2ms)  SELECT 1 FROM "users" WHERE LOWER("users"."email") = LOWER('test@email.com') LIMIT 1
   (0.1ms)  rollback transaction
 => #<User id: nil, name: "John", email: "test@email.com", created_at: nil, updated_at: nil, password_digest: "$2a$10$mY0/9RgjwOU46ZYcSC0TFOCMxrPiqWTEHWe1K27O/3Ya...">
Run Code Online (Sandbox Code Playgroud)

当我使用SQLite数据库浏览器检查sqlite数据库的文件时,我什么也看不见.

这是我的用户模型:

class User < ActiveRecord::Base

    #these attributes can be modified by the users
    attr_accessible :name, :email, :password, :password_confirmation
    #ruby's way of calling a method below...
    has_secure_password

    #validation testing
    validates :name, presence: true, length: { maximum: 50 }
    #regular expression (there is an official one)
    VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
    #and add it..
    validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
        uniqueness:  { case_sensitive: false }
    #validate password 
    validates :password, length: {minimum: 6}
    validates :password_confirmation, presence: true

end
Run Code Online (Sandbox Code Playgroud)

为什么数据没有输入我的数据库?

无论我输入什么,我都会收到这个错误!

这例如:

1.9.3p125 :005 > User.create(name:"Smith", email:"smith@email.com", password:"foo", password_confirmation:"foo")
   (0.1ms)  begin transaction
  User Exists (0.1ms)  SELECT 1 FROM "users" WHERE LOWER("users"."email") = LOWER('smith@email.com') LIMIT 1
   (0.0ms)  rollback transaction
 => #<User id: nil, name: "Smith", email: "smith@email.com", created_at: nil, updated_at: nil, password_digest: "$2a$10$6nzyRJ0IplI6B4bSoQEtUOIcrbFVl1ix3EAKPGJZjZQf...">
Run Code Online (Sandbox Code Playgroud)

我从未使用该电子邮件进入史密斯用户,我仍然得到"用户存在"!

编辑:

我收到了错误.密码限制是5我输入了一个3个字母的密码所以当我输入这个:

User.create(name:"Smith", email:"smith@email.com", password:"foobar", password_confirmation:"foobar")
   (0.1ms)  begin transaction
  User Exists (0.2ms)  SELECT 1 FROM "users" WHERE LOWER("users"."email") = LOWER('smith@email.com') LIMIT 1
Binary data inserted for `string` type on column `password_digest`
  SQL (1.7ms)  INSERT INTO "users" ("created_at", "email", "name", "password_digest", "updated_at") VALUES (?, ?, ?, ?, ?)  [["created_at", Mon, 12 Mar 2012 00:16:42 UTC +00:00], ["email", "smith@email.com"], ["name", "Smith"], ["password_digest", "$2a$10$v/FqAuUPpbdIJ44jVHxbKOJt/uoBTJVkP4KIhzJHNcF8rWPFfKusi"], ["updated_at", Mon, 12 Mar 2012 00:16:42 UTC +00:00]]
   (266.9ms)  commit transaction
 => #<User id: 1, name: "Smith", email: "smith@email.com", created_at: "2012-03-12 00:16:42", updated_at: "2012-03-12 00:16:42", password_digest: "$2a$10$v/FqAuUPpbdIJ44jVHxbKOJt/uoBTJVkP4KIhzJHNcF8...">
Run Code Online (Sandbox Code Playgroud)

我工作,但我仍然得到这个奇怪的用户存在错误...任何想法?

Art*_*ara 8

刚到这里使用谷歌搜索,发现问题是什么.实际上,这是一个垃圾错误信息.即使有一个干净的数据库,它也会出现.问题是:密码只有3个字符长,这将导致问题

    validates :password, length: {minimum: 6}
Run Code Online (Sandbox Code Playgroud)

所以,如果你尝试使用更长的密码(和确认),它应该工作.(PS:我使用的是MySQL服务器,而不是SQLite,但我很确定错误是一样的)


oco*_*odo 8

  1. user = User.new

  2. 设置字段 user

  3. user.save

  4. 看着 user.errors


Ben*_*Lee 1

您正尝试在存在唯一验证的数据库中创建重复行。查看您的错误消息(“用户存在”):

User Exists (0.2ms)  SELECT 1 FROM "users" WHERE LOWER("users"."email") = LOWER('test@email.com') LIMIT 1
Run Code Online (Sandbox Code Playgroud)

查看模型中的行:

validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
    uniqueness:  { case_sensitive: false }
Run Code Online (Sandbox Code Playgroud)

它验证用户的电子邮件地址是唯一的。因此,数据库中必须已经有一行以“test@email.com”作为电子邮件地址。