提交 310dc5dc 编写于 作者: R Ryuta Kamizono

`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.
上级 d50380f4
......@@ -334,18 +334,16 @@ def create_table(table_name, comment: nil, **options)
# 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 @@ def setup
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 @@ def test_create_join_table_with_index
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册