mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
create_join_table
should respect references
column type
Follow up of #26266. The default type of `primary_key` and `references` were changed to `bigint` since #26266. But `create_join_table` column type is still `integer`. It should respect `references` column type.
This commit is contained in:
parent
d50380f4e3
commit
310dc5dc44
2 changed files with 17 additions and 8 deletions
|
@ -334,18 +334,16 @@ module ActiveRecord
|
|||
# part_id int NOT NULL,
|
||||
# ) ENGINE=InnoDB DEFAULT CHARSET=utf8
|
||||
#
|
||||
def create_join_table(table_1, table_2, options = {})
|
||||
def create_join_table(table_1, table_2, column_options: {}, **options)
|
||||
join_table_name = find_join_table_name(table_1, table_2, options)
|
||||
|
||||
column_options = options.delete(:column_options) || {}
|
||||
column_options.reverse_merge!(null: false)
|
||||
type = column_options.delete(:type) || :integer
|
||||
column_options.reverse_merge!(null: false, index: false)
|
||||
|
||||
t1_column, t2_column = [table_1, table_2].map { |t| t.to_s.singularize.foreign_key }
|
||||
t1_ref, t2_ref = [table_1, table_2].map { |t| t.to_s.singularize }
|
||||
|
||||
create_table(join_table_name, options.merge!(id: false)) do |td|
|
||||
td.send type, t1_column, column_options
|
||||
td.send type, t2_column, column_options
|
||||
td.references t1_ref, column_options
|
||||
td.references t2_ref, column_options
|
||||
yield td if block_given?
|
||||
end
|
||||
end
|
||||
|
|
|
@ -12,7 +12,7 @@ module ActiveRecord
|
|||
|
||||
teardown do
|
||||
%w(artists_musics musics_videos catalog).each do |table_name|
|
||||
connection.drop_table table_name if connection.table_exists?(table_name)
|
||||
connection.drop_table table_name, if_exists: true
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -78,6 +78,17 @@ module ActiveRecord
|
|||
assert_equal [%w(artist_id music_id)], connection.indexes(:artists_musics).map(&:columns)
|
||||
end
|
||||
|
||||
def test_create_join_table_respects_reference_key_type
|
||||
connection.create_join_table :artists, :musics do |t|
|
||||
t.references :video
|
||||
end
|
||||
|
||||
artist_id, music_id, video_id = connection.columns(:artists_musics).sort_by(&:name)
|
||||
|
||||
assert_equal video_id.sql_type, artist_id.sql_type
|
||||
assert_equal video_id.sql_type, music_id.sql_type
|
||||
end
|
||||
|
||||
def test_drop_join_table
|
||||
connection.create_join_table :artists, :musics
|
||||
connection.drop_join_table :artists, :musics
|
||||
|
|
Loading…
Reference in a new issue