【问题标题】:Why is rails 3.2 allowing duplicate records despite validation?为什么尽管经过验证,rails 3.2 仍允许重复记录?
【发布时间】:2014-11-28 10:22:58
【问题描述】:

我正在使用 Rails 3.2,我正在使用 Postgresql。我有一个用记录更新 QuestionRecords 表的按钮。此表存储 user_id 和 question_id 以及其他一些信息。在模型上我有以下验证:

validates_uniqueness_of :user_id, :scope => :question_id

奇怪的是,尽管进行了验证,但它两次允许将完全相同的记录插入到数据库中。这破坏了我正在使用的算法,所以有点灾难。

首先,为什么会这样;其次,如何防止它超出验证范围?

【问题讨论】:

    标签: ruby-on-rails-3 postgresql validation activerecord


    【解决方案1】:

    为什么会这样?

    比赛条件。应用端验证是一个两步过程。首先进行查询以检查现有记录。如果没有找到,应用程序继续保存。可能会发生两个(或更多)应用线程执行检查,都得到肯定的结果并继续插入数据。

    如何防止它超出验证范围?

    您应该在数据库级别强制执行唯一性。这就像在 (question_id, user_id) 上创建唯一索引一样简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多