123456789_123456789_123456789_123456789_123456789_

Exception: ActiveRecord::MismatchedForeignKey

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, StatementInvalid, ActiveRecordError, StandardError
Instance Chain:
self, StatementInvalid, ActiveRecordError, StandardError
Inherits: ActiveRecord::StatementInvalid
Defined in: activerecord/lib/active_record/errors.rb

Overview

Raised when a foreign key constraint cannot be added because the column type does not match the referenced column type.

Class Method Summary

Instance Attribute Summary

Constructor Details

.new(message: nil, sql: nil, binds: nil, table: nil, foreign_key: nil, target_table: nil, primary_key: nil, primary_key_column: nil) ⇒ MismatchedForeignKey

[ GitHub ]

  
# File 'activerecord/lib/active_record/errors.rb', line 150

def initialize(
  message: nil,
  sql: nil,
  binds: nil,
  table: nil,
  foreign_key: nil,
  target_table: nil,
  primary_key: nil,
  primary_key_column: nil
)
  if table
    type = primary_key_column.bigint? ? :bigint : primary_key_column.type
    msg = <<~EOM.squish
      Column `#{foreign_key}` on table `#{table}` does not match column `#{primary_key}` on `#{target_table}`,
      which has type `#{primary_key_column.sql_type}`.
      To resolve this issue, change the type of the `#{foreign_key}` column on `#{table}` to be :#{type}.
      (For example `t.#{type} :#{foreign_key}`).
    EOM
  else
    msg = <<~EOM.squish
      There is a mismatch between the foreign key and primary key column types.
      Verify that the foreign key column type and the primary key of the associated table match types.
    EOM
  end
  if message
    msg << "\nOriginal message: #{message}"
  end
  super(msg, sql: sql, binds: binds)
end