Skip to content

Commit d84c526

Browse files
shimedrwl
authored andcommitted
Fix foreign key issue with Rails 6 and Sqlite3 (ctran#695)
Rails 6 has dropped name from ActiveRecord::ConnectionAdapters::ForeignKeyDefinition for Sqlite3 adapter: https://github.com/rails/rails/blob/f2df77709f7e536aaf4d6f984ff21a49d44d34c1/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb\#L305-L311 This has caused issues with getting foreign key info and blowing up when trying to annotate models with foreign keys. This commit adds one additional check for name presence and uses column attribute from options instead. Closes ctran#620.
1 parent 5da7964 commit d84c526

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

lib/annotate/annotate_models.rb

+4-1
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,10 @@ def get_foreign_key_info(klass, options = {})
472472
foreign_keys = klass.connection.foreign_keys(klass.table_name)
473473
return '' if foreign_keys.empty?
474474

475-
format_name = ->(fk) { options[:show_complete_foreign_keys] ? fk.name : fk.name.gsub(/(?<=^fk_rails_)[0-9a-f]{10}$/, '...') }
475+
format_name = lambda do |fk|
476+
return fk.options[:column] if fk.name.blank?
477+
options[:show_complete_foreign_keys] ? fk.name : fk.name.gsub(/(?<=^fk_rails_)[0-9a-f]{10}$/, '...')
478+
end
476479

477480
max_size = foreign_keys.map(&format_name).map(&:size).max + 1
478481
foreign_keys.sort_by {|fk| [format_name.call(fk), fk.column]}.each do |fk|

0 commit comments

Comments
 (0)