Exception: ActiveRecord::MismatchedForeignKey

Inherits:
StatementInvalid show all
Defined in:
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.

Instance Method Summary collapse

Constructor Details

#initialize(adapter = nil, message: nil, table: nil, foreign_key: nil, target_table: nil, primary_key: nil) ⇒ MismatchedForeignKey

Returns a new instance of MismatchedForeignKey.


120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/active_record/errors.rb', line 120

def initialize(adapter = nil, message: nil, table: nil, foreign_key: nil, target_table: nil, primary_key: nil)
  @adapter = adapter
  if table
    msg = <<-EOM.strip_heredoc
      Column `#{foreign_key}` on table `#{table}` has a type of `#{column_type(table, foreign_key)}`.
      This does not match column `#{primary_key}` on `#{target_table}`, which has type `#{column_type(target_table, primary_key)}`.
      To resolve this issue, change the type of the `#{foreign_key}` column on `#{table}` to be :integer. (For example `t.integer #{foreign_key}`).
    EOM
  else
    msg = <<-EOM
      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)
end