Ruby on Rails ActiveRecord唯一性验证

时间:2013-02-18 18:05:53

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

我是Rails的新手,正在阅读有关该主题的一些资源。我得到了一些问题。好吧,假设我们有一个模型,它验证了一些属性的唯一性:

class User < ActiveRecord::Base
  attr_accesible :name
  validates :name, uniqueness: true
end

所以,我现在合理地期望,我将无法在数据库中创建(或更准确地说 - 保存)两个具有相同名称的User实例。但是,这个资源确实坚持,它仍然是可能的!

  
      
  • 有些用户登录。
  •   
  • 多次点击“登录”按钮
  •   
  • 请求1在内存中创建用户(有效)
  •   
  • 请求2在内存中创建用户(有效)
  •   
  • 请求1已成功保存
  •   
  • 请求2已成功保存
  •   

稍后此消息来源建议将数据库中的索引添加到“名称”列并使其唯一。

但是,如果我之前说过 - 验证是在保存过程中进行的,那么如何保存第二个请求呢?或者我丢失了什么?

(我提到的资源是Rails Tutorial

1 个答案:

答案 0 :(得分:3)

第二个请求在第一个记录保存在DB中之前被触发,因此rails会验证没有指定名称的记录允许它保存。这就是为什么建议在数据库字段中添加一个唯一的,以避免这些边缘情况。

或者换句话说,记录会在内存中传递验证。