class ActiveRecord::MismatchedForeignKey
Raised when a foreign key constraint cannot be added because the column type does not match the referenced column type.
Public Class Methods
new(adapter = nil, message: nil, table: nil, foreign_key: nil, target_table: nil, primary_key: nil)
click to toggle source
Calls superclass method
ActiveRecord::StatementInvalid.new
# 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
Private Instance Methods
column_type(table, column)
click to toggle source
# File lib/active_record/errors.rb, line 141 def column_type(table, column) @adapter.columns(table).detect { |c| c.name == column }.sql_type end