51 lines
1.3 KiB
Ruby
51 lines
1.3 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
# This patch is a backport of https://github.com/rails/rails/pull/42350
|
||
|
# It fixes a bug introduced by Rails which affects reference columns marking
|
||
|
# them as integer instead of bigint.
|
||
|
#
|
||
|
# This should be deleted when version 7.0.3 is released.
|
||
|
module FreedomPatches
|
||
|
module ArReferencesFix
|
||
|
module SchemaDefinition
|
||
|
def index_options(table_name)
|
||
|
index_options = as_options(index)
|
||
|
|
||
|
# legacy reference index names are used on versions 6.0 and earlier
|
||
|
return index_options if options[:_uses_legacy_reference_index_name]
|
||
|
|
||
|
index_options[:name] ||= polymorphic_index_name(table_name) if polymorphic
|
||
|
index_options
|
||
|
end
|
||
|
|
||
|
ActiveRecord::ConnectionAdapters::ReferenceDefinition.prepend(self)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class ActiveRecord::Migration::Compatibility::V6_0
|
||
|
module TableDefinition
|
||
|
def references(*args, **options)
|
||
|
options[:_uses_legacy_reference_index_name] = true
|
||
|
super
|
||
|
end
|
||
|
alias :belongs_to :references
|
||
|
end
|
||
|
|
||
|
def add_reference(table_name, ref_name, **options)
|
||
|
if connection.adapter_name == "SQLite"
|
||
|
options[:type] = :integer
|
||
|
end
|
||
|
options[:_uses_legacy_reference_index_name] = true
|
||
|
super
|
||
|
end
|
||
|
alias :add_belongs_to :add_reference
|
||
|
|
||
|
def compatible_table_definition(t)
|
||
|
class << t
|
||
|
prepend TableDefinition
|
||
|
end
|
||
|
super
|
||
|
end
|
||
|
end
|