# 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 118
        def initialize(adapter = nil, message: nil, table: nil, foreign_key: nil, target_table: nil, primary_key: nil)
          @adapter = adapter
          if table
            msg = "          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}`).
    ".strip_heredoc
          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 139
    def column_type(table, column)
      @adapter.columns(table).detect { |c| c.name == column }.sql_type
    end