簡體   English   中英

Rails-通過控制台插入數據庫行不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM