Exception: ActiveRecord::MismatchedForeignKey
- Inherits:
-
StatementInvalid
- Object
- StandardError
- ActiveRecordError
- AdapterError
- StatementInvalid
- ActiveRecord::MismatchedForeignKey
- 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 Attribute Summary
Attributes inherited from StatementInvalid
Attributes inherited from AdapterError
Instance Method Summary collapse
-
#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) ⇒ MismatchedForeignKey
constructor
A new instance of MismatchedForeignKey.
- #set_query(sql, binds) ⇒ Object
Constructor Details
#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) ⇒ MismatchedForeignKey
Returns a new instance of MismatchedForeignKey.
239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 |
# File '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) ⇒ Object
275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 |
# File '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 |