为什么rails 3.2允许重复记录,尽管验证?

时间:2014-10-03 10:49:04

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

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

validates_uniqueness_of :user_id, :scope => :question_id

奇怪的是,尽管有这样的验证,它已经两次启用了完全相同的记录。这破坏了我正在使用的算法,所以有点像灾难。

首先,为什么会发生这种情况;其次,我怎样才能阻止它超出验证范围?

1 个答案:

答案 0 :(得分:1)

  

为什么会这样?

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

  

如何在验证之外阻止它?

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