我正在运行 "rails console",然后执行以下命令:
我得到了这个:
当我使用SQLite数据库浏览器查看sqlite数据库文件时,什么也没有显示。
以下是我的用户模型:
User.create(name:"John", email:"test@email.com", password:"foo", password_confirmation:"foo")
我得到了这个:
(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...">
当我使用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
为什么我的数据库没有输入数据?
我无论输入什么都会出现这个错误!
例如:
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...">
我从未使用那个电子邮件地址注册过Smith用户,但我仍然收到“用户已存在”的提示!
编辑:
我明白了错误原因。密码长度限制为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...">
我的程序可以运行,但我仍然遇到了一个奇怪的“用户已存在”错误……有什么想法吗?
test@email.com
的用户,因此电子邮件的:uniqueness
验证失败。 - pjumbleuser = User.new(name:"Smith", email:"smith@email.com", password:"foo", password_confirmation:"foo")
然后执行puts user.errors
,你会得到什么输出? - pjumbleUser.create(name:"fwjwof42848yt24", email:"fwjwof42848yt24@email.com", password:"foo", password_confirmation:"foo")
,看看是否会出现相同的问题。 - Ben Leeuser.errors
- 它会告诉你出了什么问题。 - ocodo