나는이 예외를 흔들 수없는 것처럼 보입니다.ActiveRecord :: RecordNotUnique 문제를 해결하려면 어떻게해야합니까?
class Batch < ApplicationRecord
before_create :upcase_session_id
def self.for_session(session_id, opts)
batch = Batch.where(session_id: session_id.upcase).first_or_initialize
if batch.new_record?
batch.property = opts[:property]
batch.save!
end
batch
end
private
def upcase_session_id
self.session_id = session_id.upcase
end
end
호출 코드 :
def retrieve_batch
self.batch ||= Batch.for_session(batch_session_id, property: property)
end
스키마 일괄 테이블 :
create_table "batches", force: :cascade do |t|
t.string "session_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "property_id"
t.index ["property_id"], name: "index_batches_on_property_id", using: :btree
t.index ["session_id"], name: "index_batches_on_session_id", unique: true, using: :btree
end
나는이 예외를 받고 중지하려면이 코드를 변경하는 방법을 잘 모르겠어요 나는 다음과 같은 코드가 있습니다 내가 계속지고있어.
예외 :
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint
"index_batches_on_session_id" DETAIL: Key (session_id)=(A19A5BFD-A90C-40B4-9384-5C6C1C88213B) already exists. :
INSERT INTO "batches" ("session_id", "created_at", "updated_at", "property_id")
VALUES ($1, $2, $3, $4) RETURNING "id" where my schema.rb shows:
t.index ["session_id"], name: "index_batches_on_session_id", unique: true, using: :btree
당신이 당신의'Batch' 모델의 코드를 제공 할 수 있을까요? –
주어진 정보는 충분하지 않지만 다음과 같이 가정합니다 : 1 :) session_id는 저장하기 전에 donwcase로 설정되므로 검색 줄에서 'session_id.upcase'로 검색하면 항상 새 레코드가 반환됩니다. 저장 줄'batch.session_id'는 소문자로 저장되므로 예외가 발생합니다. 2 :'property'는'save! '전에 확인해야 할 몇 가지 고유 한 유효성 검사를합니다. – Frozenna
@MikhailKatrin 내 모델 코드를 – Kamilski81