我有一个带有外键的模型。即使有一个数据库约束阻止重复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
约束组合在一起。那么为什么相反呢?