1

我对 Rails 很陌生,并且正在阅读有关该主题的一些资源。我有一些问题。好的,假设我们确实有一个模型,可以验证某些属性的唯一性:

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

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

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

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

但是,如果正如我之前所说的那样——在保存过程中进行验证,那么如何保存第二个请求呢?还是我失去了什么?

(我提到的资源是Rails 教程

4

1 回答 1

3

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

或者换句话说,记录通过内存中的验证。

于 2013-02-18T18:14:05.757 回答