我有一个 list_users 模型,其中包含将用户加入列表的字段 (id、list_id、user_id)。
在我的列表 Rails 模型中,我进行了以下验证以防止重复。
validates_uniqueness_of :user_id, :scope => :list_id
但是,数据库中的 list_users 表中不时会创建一条重复记录,这最终会破坏很多东西...
=> [#<ListMember id: 37199, user_id: 1203713, list_id: 13651, created_at: "2012-06-04 20:02:11", updated_at: "2012-06-04 20:02:11">
=> [#<ListMember id: 37195, user_id: 1203713, list_id: 13651, created_at: "2012-06-04 20:01:40", updated_at: "2012-06-04 20:01:40">
有没有人见过这个?谢谢
最佳答案
我以前见过这个。我不知道你的上下文是否相同,但我看到这个的原因基本上是我不小心在内存中构建了两个具有相同 id 对的记录,对其中两个运行验证,然后保存都到数据库。唯一性验证没有捕捉到这一点,因为在运行验证时数据库中不存在这两条记录。也许这就是您正在经历的。
编辑:鉴于您的记录创建时间非常接近,我认为情况很可能如此。
此外,您应该使用add_index :list_users, [:user_id, :list_id]
将索引迁移到数据库
关于ruby-on-rails - Rails + PostgreSQL,根据 Rails 验证规则创建重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11024965/