2016-09-05 18 views
3

私は筆記具とパラノイアの宝石を使用しているレールアプリを持っています。
私は電子メールの列にユニークな検証を持つpostgresのデータベースにusersテーブルを持っています。 私はソフト削除にパラノイアを使用しています。問題はユーザーを削除してから、削除したユーザーの電子メールを使用してユーザーを作成するときにエラーPG::UniqueViolation: ERRORがスローされます。
これについて読んだことがあります。これは、レールの部分インデックス機能を使用して解決できることを知っています。ユニークな制約の問題パラノイアの宝石

http://scottsmerchek.com/2015/08/03/taking-the-d-out-of-crud/

https://devcenter.heroku.com/articles/postgresql-indexes#partial-indexes

どのように私はこれを実装するのですか?
不正なフォーマットのため申し訳ありませんが、携帯端末から入力してください。

答えて

2

電子メールがデータベースから削除されないようにソフト削除としてユーザーを削除したため、ユーザー属性is_deletedのみがtrueに設定されました。

PG::UniqueViolation: ERRORを解決するには(私は `顧客に一意索引のcustomer_name_indexをCREATE、部分インデックスをサポートしていますpostgresのを使用しています今、あなたは、両方のフィールドメールに一意のインデックスを作成する必要がありますし、 deleted_atだからあなたの移行が

class AddUniqueIndexToUsers < ActiveRecord::Migration 
    def change 
    remove_index :users, column: :email 
    add_index :users, [:email, :deleted_at], unique: true 
    end 
end 
+0

になります名前) 削除された場所はNULLです。どうすればこのようなことができますか?移行は何ですか? @Rakesh –

+0

あなたは上記の解決策を試しましたか? –

+0

add_indexより前にremove_indexを実行した理由を教えてください。インデックスはデフォルトで追加されていますか? @RakeshPatidar –