class RescueUniqueConstraint::Adapter::SqliteAdapter

Public Class Methods

new(table_name) click to toggle source
# File lib/rescue_unique_constraint/adapter/sqlite_adapter.rb, line 4
def initialize(table_name)
  @table_name = table_name
end

Public Instance Methods

index_error?(index, error_message) click to toggle source

Sample error message returned by ActiveRecord for Sqlite Unique exception: ‘SQLite3::ConstraintException: UNIQUE constraint failed: things.code, things.score: INSERT INTO “things” (“name”, “test”, “code”, “score”) VALUES (?, ?, ?, ?)’

Step1: extract column names from above message on which unique constraint failed. Step2: Check if this index’s field is among those columns.

# File lib/rescue_unique_constraint/adapter/sqlite_adapter.rb, line 13
def index_error?(index, error_message)
  column_names = error_message.scan(%r{(?<=#{@table_name}\.)\w+})
  column_names.include?(index.field)
end