Ruby on Rails ActiveRecord唯一性validation

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

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

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

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

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

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

(我提到的资源是Rails Tutorial

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

或者换句话说,记录传递内存中的validation。