diff options
author | Aleksey Magusev <lexmag@gmail.com> | 2012-07-11 01:38:21 +0400 |
---|---|---|
committer | Aleksey Magusev <lexmag@gmail.com> | 2012-07-18 00:13:19 +0400 |
commit | 211d88b71b3df2ae161b23579a79f8e937132388 (patch) | |
tree | 531ae144bfd1e3fa8bcad17d31547d4dd4d84bb2 /activerecord/lib/active_record | |
parent | d4811702510bf289bb07ce93263cd04d49e96bea (diff) | |
download | rails-211d88b71b3df2ae161b23579a79f8e937132388.tar.gz rails-211d88b71b3df2ae161b23579a79f8e937132388.tar.bz2 rails-211d88b71b3df2ae161b23579a79f8e937132388.zip |
Add join table migration generator
For instance, running
rails g migration CreateMediaJoinTable artists musics:uniq
will create a migration with
create_join_table :artists, :musics do |t|
# t.index [:artist_id, :music_id]
t.index [:music_id, :artist_id], unique: true
end
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb | 7 | ||||
-rw-r--r-- | activerecord/lib/active_record/migration/join_table.rb | 6 |
2 files changed, 7 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb index 3c3f01223c..a246e6ace1 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb @@ -206,9 +206,12 @@ module ActiveRecord column_options = options.delete(:column_options) || {} column_options.reverse_merge!({:null => false}) + t1_column, t2_column = [table_1, table_2].map{ |t| "#{t.to_s.singularize}_id" } + create_table(join_table_name, options.merge!(:id => false)) do |td| - td.integer :"#{table_1.to_s.singularize}_id", column_options - td.integer :"#{table_2.to_s.singularize}_id", column_options + td.integer t1_column, column_options + td.integer t2_column, column_options + yield td if block_given? end end diff --git a/activerecord/lib/active_record/migration/join_table.rb b/activerecord/lib/active_record/migration/join_table.rb index 01a580781b..e880ae97bb 100644 --- a/activerecord/lib/active_record/migration/join_table.rb +++ b/activerecord/lib/active_record/migration/join_table.rb @@ -4,13 +4,11 @@ module ActiveRecord private def find_join_table_name(table_1, table_2, options = {}) - options.delete(:table_name) { join_table_name(table_1, table_2) } + options.delete(:table_name) || join_table_name(table_1, table_2) end def join_table_name(table_1, table_2) - tables_names = [table_1, table_2].map(&:to_s).sort - - tables_names.join("_").to_sym + [table_1, table_2].sort.join("_").to_sym end end end |