[英]Rails - inserting a db row via console doesn't work
我正在嘗試通過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
它並沒有持久化User(可以通過rollback
語句看出來)。 看起來好像無法通過電子郵件的唯一性驗證。 您可以通過在嘗試創建的User
上調用errors.full_messages
或使用create!
來查看錯誤create!
而不是create
您最有可能驗證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!
要消除此錯誤,請首先刪除數據庫中存在的記錄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.