所以我有以下場景。我想創建一個新用戶,但我希望它的電子郵件是唯一的。所以我有以下驗證
def uniq_email
errors.add(:email, "Already existing User with email: #{email}") if
User.exists?(email: email)
end
這很好用。問題是當我想更新這個用戶時,如果我嘗試用已經存在的電子郵件更改電子郵件,它允許我這樣做。我嘗試在驗證中添加 [:create, :update] 但如果我這樣做,當我更改它的地址時,例如它會再次運行模型驗證并告訴我該電子郵件的用戶已經存在。有什么幫助嗎?我怎樣才能避免這種情況?
謝謝:D
uj5u.com熱心網友回復:
您的場景的最佳解決方案是使用validates_uniqueness_of或uniqueness,因為它可以確保應用程式級別的電子郵件唯一性。
class User < ActiveRecord::Base
validates_uniqueness_of :email
# or
validates :email, uniqueness: true
end
為了使唯一性防彈,應在資料庫中添加電子郵件的唯一索引。如果出于某種原因,您繞過模型中的驗證,DB 將引發錯誤。
class MakeEmailUnique < ActiveRecord::Migration
def change
add_index :users, :email, unique: true
end
end
您應該查看Validation Docs檔案以了解有關如何使用它們的更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/326820.html
標籤:红宝石轨道 PostgreSQL 验证
