Exception: ActiveRecord::MismatchedForeignKey
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
|
|
Instance Chain:
|
|
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
StatementInvalid
- Inherited
AdapterError
- Inherited
Instance Attribute Summary
Instance Method 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, query_parser: nil, connection_pool: nil) ⇒ MismatchedForeignKey
# File 'activerecord/lib/active_record/errors.rb', line 239
def initialize( message: nil, sql: nil, binds: nil, table: nil, foreign_key: nil, target_table: nil, primary_key: nil, primary_key_column: nil, query_parser: nil, connection_pool: nil ) @original_message = @query_parser = query_parser 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 msg << "\nOriginal message: #{}" end super(msg, sql: sql, binds: binds, connection_pool: connection_pool) end
Instance Method Details
#set_query(sql, binds)
[ GitHub ]# File 'activerecord/lib/active_record/errors.rb', line 275
def set_query(sql, binds) if @query_parser && !@sql self.class.new( message: @original_message, sql: sql, binds: binds, connection_pool: @connection_pool, **@query_parser.call(sql) ).tap do |exception| exception.set_backtrace backtrace end else super end end