我是Rails的新手,正在阅读有关该主题的一些资源。我得到了一些问题。好吧,假设我们有一个模型,它验证了一些属性的唯一性:
class User < ActiveRecord::Base
attr_accesible :name
validates :name, uniqueness: true
end
所以,我现在合理地期望,我将无法在数据库中创建(或更准确地说 - 保存)两个具有相同名称的User实例。但是,这个资源确实坚持,它仍然是可能的!
- 有些用户登录。
- 多次点击“登录”按钮
- 请求1在内存中创建用户(有效)
- 请求2在内存中创建用户(有效)
- 请求1已成功保存
- 请求2已成功保存
稍后此消息来源建议将数据库中的索引添加到“名称”列并使其唯一。
但是,如果我之前说过 - 验证是在保存过程中进行的,那么如何保存第二个请求呢?或者我丢失了什么?
(我提到的资源是Rails Tutorial
答案 0 :(得分:3)
第二个请求在第一个记录保存在DB中之前被触发,因此rails会验证没有指定名称的记录允许它保存。这就是为什么建议在数据库字段中添加一个唯一的,以避免这些边缘情况。
或者换句话说,记录会在内存中传递验证。