在Ruby on Rails模型中,为什么在关联上验证存在,但在外键上验证唯一性

时间:2012-09-05 14:02:21

标签: ruby-on-rails validation activerecord model

我有一个带外键的模型。即使存在数据库约束阻止重复的user_id进入SomeClass的表,我也在重复(预先确定)模型中的验证,以便更好地处理它。所以我的模型看起来像这样:

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 个答案:

答案 0 :(得分:1)

我认为原因在于user_iduser之间存在差异。

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

在检查user_id和用户的唯一性时,AFAIK可能会产生相同的效果,检查user_id就足够了,确保它是唯一的。