Rails + PostgreSQL,正在针对rails验证规则创建重复记录

时间:2012-06-13 23:46:37

标签: ruby-on-rails ruby-on-rails-3 postgresql

我有一个list_users模型,其中包含字段(id,list_id,user_id),用于连接用户列表。

在我的列表轨道模型中,我进行了以下验证以防止重复。

  validates_uniqueness_of :user_id, :scope => :list_id

然而,在DB的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">

有没有人见过这个?感谢

2 个答案:

答案 0 :(得分:2)

我之前见过这个。我不知道你的上下文是否相同,但我看到这个的原因基本上是我在内存中意外构建了两个具有相同id对的记录,在其中两个上运行验证,然后保存两者都是DB。唯一性验证没有发现这一点,因为在运行验证时DB中都没有记录。也许这就是你所经历的。

编辑:看到你的记录创建时间的接近程度,我认为可能就是这种情况。

此外,您应该使用add_index :list_users, [:user_id, :list_id]

将索引迁移到数据库

答案 1 :(得分:2)

我无法使用Rails部分,但您应该在数据库级别添加唯一索引:

ALTER TABLE list_users ADD UNIQUE (list_id, user_id)

也许它可以帮助您诊断Rails代码中的错误。