我有一个带外键的模型。即使存在数据库约束阻止重复的user_id
进入SomeClass
的表,我也在重复(预先确定)模型中的验证,以便更好地处理它。所以我的模型看起来像这样:
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
约束组合在一起。那么为什么它不一致?
答案 0 :(得分:1)
我认为原因在于user_id
和user
之间存在差异。
user
的存在不仅确保user_id
的存在,还确保实际用户的存在。
在检查user_id和用户的唯一性时,AFAIK可能会产生相同的效果,检查user_id就足够了,确保它是唯一的。