0

ユーザーとリストを結合するフィールド(id、list_id、user_id)を持つlist_usersモデルがあります。

リストのRailsモデルでは、重複を防ぐために次の検証があります。

  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">

誰かがこれを見たことがありますか?ありがとう

4

2 に答える 2

2

私はこれを前に見たことがあります。コンテキストが同じかどうかはわかりませんが、これが表示された理由は、基本的に、メモリ内に同じIDペアを持つ2つのレコードを誤って作成し、2つのレコードで検証を実行してから、保存していたためです。両方をDBに。検証が実行された時点でどちらのレコードもDBに存在しなかったため、一意性検証はこれをキャッチしませんでした。多分これはあなたが経験していることです。

編集:あなたのレコードが作成された時間にどれだけ近いかを見て、私はこれが事実である可能性が高いと思います。

また、インデックスをデータベースに移行する必要があります。add_index :list_users, [:user_id, :list_id]

于 2012-06-14T00:22:59.493 に答える
2

Railsの部分についてはお役に立てませんが、データベースレベルで一意のインデックスを追加する必要があります。

ALTER TABLE list_users ADD UNIQUE (list_id, user_id)

たぶんそれはあなたがあなたのRailsコードのバグを診断するのを助けるでしょう。

于 2012-06-14T00:28:51.147 に答える