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.
226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 |
# File 'lib/active_record/errors.rb', line 226 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
262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 |
# File 'lib/active_record/errors.rb', line 262 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 |