ruby-on-rails - Rails + PostgreSQL,根据 Rails 验证规则创建重复记录

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

我有一个 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/

相关文章:

ruby-on-rails - 包含时,ActiveAdmin Helper 在 instance_eval 上抛出错误

ruby-on-rails - 在rails 3中响应_to_parent

ruby-on-rails-3 - Rails 3 日期时间比较 ActiveRecord 查询中的日期

ruby-on-rails - rails - 在本地运行生产模式 = 没有要加载的文件 - 配置/环境

postgreSQL:如何复制一行

ruby-on-rails - 删除 Rails 中 facebook graph api 发布的帖子上的 "via APP_NAME"

ruby-on-rails - 无法从 Rails Controller 呈现 JavaScript

ruby-on-rails - 在Rails中过滤json渲染

sql - PostgreSQL 中的 WHERE NOT EXISTS 给出语法错误

sql - 如何在 Postgres 中使用带通配符的组