2

我正在尝试通过我的 Rails 控制台将新记录插入 SQLiteDB。只需使用User.create().

该行未出现在我的数据库中。该消息暗示用户存在,但调用User.first返回null并检查数据库显示一个空表。我错过了什么?

输入:

console > User.create(name: 'don', email: 'don@gmaill.com', password: 'test', password_confirmation: 'test')

输出:

   (0.1ms)  begin transaction
  User Exists (0.1ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = 'don@gmaill.com' LIMIT 1
   (0.0ms)  rollback transaction
 => #<User id: nil, name: "don", email: "don@gmaill.com", created_at: nil, updated_at: nil, password_digest: "$2a$10$3EK3L932ryjrJPFIc4E0/uzavrpkWylDRzx4Wkdwzx8d..."> 

用户等级:

class User < ActiveRecord::Base
    before_save { self.email = email.downcase }
    validates :name, presence: true, length: { maximum: 50 }

    VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
    validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, 
                                        uniqueness: { case_sen,sitive: false }

    has_secure_password
    validates :password, length: { minimum: 6 }
end
4

2 回答 2

2

它不是持久化用户(你可以通过rollback语句来判断)。看起来它没有通过电子邮件的唯一性验证。您可以通过调用您尝试创建的,或使用errors.full_messages代替来查看错误Usercreate!create

于 2013-11-05T05:17:30.420 回答
1

您很可能正在验证email字段的唯一性。因此,ActiveRecord 发出select第一个检查是否存在具有相同电子邮件地址的记录,并找到一个。因此Create不会将新记录保存到数据库。

create无论如何都会返回对象。

你可以试试这个来验证这一点。而不是create, 尝试new后跟save!

console > u = User.new(name: 'don', email: 'don@gmaill.com', password: 'test', password_confirmation: 'test')
console > u.save!

要摆脱这个错误,首先删除数据库中存在的记录

于 2013-11-05T05:18:47.713 回答