Ich kann diese Ausnahme nicht erschüttern. Ich habe den folgenden Code:Was kann ich schreiben, um ActiveRecord :: RecordNotUnique zu beheben?
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
Telefonvorwahl:
def retrieve_batch
self.batch ||= Batch.for_session(batch_session_id, property: property)
end
Schema Batches Tabelle:
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
Ich bin nicht sicher, wie ich diesen Code ändern zu stoppen diese Ausnahme immer das bekomme ich immer.
Ausnahme:
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
Könnten Sie Code Ihrer 'Batch' Modell zur Verfügung stellen? –
Die angegebenen Informationen sind nicht genug, aber hier ist, was ich annehmen kann: 1 :) session_id ist auf donwcase vor speichern festgelegt, so in Ihrer Suchzeile, wo Sie nach 'session_id.upcase' immer neuen Datensatz suchen, und in der Sicherungszeile 'batch.session_id' wird als Downcase gespeichert, daher wird die Ausnahme ausgelöst. 2 :) 'property' hat eine eindeutige Validierung, die vor' save! 'Überprüft werden muss. – Frozenna
@MichailKatrin Ich habe meinen Modellcode über – Kamilski81