2012-09-05 85 views
1

我有一個帶有外鍵的模型。即使有一個數據庫限制可以防止重複的user_id輸入SomeClass的表格,但我仍然重複(預先知道)模型中的驗證,以便更加優雅地處理它。所以我的模型看起來像這樣:在Ruby on Rails模型中,爲什麼存在已驗證關聯但在外鍵上驗證了唯一性

class SomeClass < ActiveRecord::Base 
    belongs_to :user 
    validates_presence_of :user 
    validates_uniqueness_of :user_id 
    ... 
end 

我花了一段時間才意識到這是它需要完成的。在我看來,ActiveRecord應該期望您在存在性和唯一性驗證方面始終如一地使用useruser_id。這將使:

validates :user, :presence => true, :uniqueness => true 

或:

validates :user_id, :presence => true, :uniqueness => true 

可能,這是最佳的,因爲它組的所有user約束在一起的代碼的可維護性。那麼爲什麼它不一致呢?

回答

1

我相信原因在於user_iduser之間的差異。

user的存在確保不僅存在user_id,而且存在實際用戶。

作爲檢查user_id和用戶的唯一性,AFAIK它們可能具有相同的效果,檢查user_id就足夠了,確保它是唯一的。