1

我有一个带有外键的模型。即使有一个数据库约束阻止重复user_id进入SomeClass's 表,我在模型中重复(实际上是先发制人)该验证,以便更优雅地处理它。所以我的模型看起来像这样:

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

我花了一段时间才意识到这是需要做的。在我看来,ActiveRecord 应该期望您在存在性和唯一性验证中使用其中之一user或始终使用。user_id这将使:

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

或者:

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

可能,这对于代码可维护性是最佳的,因为它将所有user约束组合在一起。那么为什么相反呢?

4

1 回答 1

1

user_id我相信原因在于和之间的差异user

的存在user不仅确保存在user_id,而且还确保实际用户的存在。

由于检查 user_id 和 user 的唯一性,AFAIK 它们可能具有相同的效果,检查 user_id 就足以确保它是唯一的。

于 2012-09-05T14:29:26.630 回答