【问题标题】:In Ruby on Rails models, why is presence validated on associations but uniqueness validated on foreign keys在 Ruby on Rails 模型中,为什么在关联上验证存在但在外键上验证唯一性
【发布时间】:2012-09-05 14:02:20
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails validation activerecord model


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      相关资源
      最近更新 更多