契約には多くのサービスを含めることができます。結合テーブルはContractsService(contracts_services)です。かなり簡単です。RoR/Postgres - 2列のユニークインデックスのエラー。レコードがなくても "重複キー値が一意制約に違反しています"
で設定インデックス:私は(コードのこの作品にとても具体的でない、またはAPIを介して、あるいはどのような方法で)このように追加しようと
def change
add_index :contracts_services, [:contract_id, :service_id], unique: true
end
:
ContractsService.where(contract_id: 16, service_id: 17).first_or_create!
私はこのエラーを取得する:しかし
ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_contracts_services_on_contract_id_and_service_id"
DETAIL: Key (contract_id, service_id)=(16, 17) already exists.
:
irb(main):015:0> ContractsService.where(contract_id: 16, service_id: 17).count
D, [2017-10-26T07:25:01.782432 #4] DEBUG -- : (1.7ms) SELECT COUNT(*) FROM "contracts_services" WHERE "contracts_services"."deleted_at" IS NULL AND "contracts_services"."contract_id" = $1 AND "contracts_services"."service_id" = $2 [["contract_id", 16], ["service_id", 17]]
=> 0
私はここで立ち往生していますが、これはこれまで見たことがありません。私は何かシンプルなものを逃している?またはインデックスが壊れていますか?他に何か?
フムを、見つける必要があり
ContractsService.rewhere(contract_id: 16, service_id: 17).count
をしようとした場合。 –@FabrizioBertoglioそれはその質問の重複ではない、私の問題はnullインデックスではありません。 –