aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@plataformatec.com.br>2012-07-18 23:04:00 -0700
committerJosé Valim <jose.valim@plataformatec.com.br>2012-07-18 23:04:00 -0700
commit993e1643650b7b0939437f86b7b4cda0d92b0b8f (patch)
treeda6e1e28ba351c4cf8d88acb0064a204a0ae4a74 /activerecord
parente482100d6ed022d00ba31c6c4377f6f947173337 (diff)
parent5a7d31913bb16977ec85d55de34ac0d79b512d62 (diff)
downloadrails-993e1643650b7b0939437f86b7b4cda0d92b0b8f.tar.gz
rails-993e1643650b7b0939437f86b7b4cda0d92b0b8f.tar.bz2
rails-993e1643650b7b0939437f86b7b4cda0d92b0b8f.zip
Merge pull request #7097 from lexmag/join_table_gen_attr
Add fkey attributes to `join_table` migration generator
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb6
-rw-r--r--activerecord/lib/active_record/migration/join_table.rb2
-rw-r--r--activerecord/lib/rails/generators/active_record/migration/migration_generator.rb12
3 files changed, 14 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 a246e6ace1..a80c1cec39 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb
@@ -204,11 +204,11 @@ module ActiveRecord
join_table_name = find_join_table_name(table_1, table_2, options)
column_options = options.delete(:column_options) || {}
- column_options.reverse_merge!({:null => false})
+ column_options.reverse_merge!(null: false)
- t1_column, t2_column = [table_1, table_2].map{ |t| "#{t.to_s.singularize}_id" }
+ t1_column, t2_column = [table_1, table_2].map{ |t| t.to_s.singularize.foreign_key }
- create_table(join_table_name, options.merge!(:id => false)) do |td|
+ create_table(join_table_name, options.merge!(id: false)) do |td|
td.integer t1_column, column_options
td.integer t2_column, column_options
yield td if block_given?
diff --git a/activerecord/lib/active_record/migration/join_table.rb b/activerecord/lib/active_record/migration/join_table.rb
index e880ae97bb..e456c81fc9 100644
--- a/activerecord/lib/active_record/migration/join_table.rb
+++ b/activerecord/lib/active_record/migration/join_table.rb
@@ -8,7 +8,7 @@ module ActiveRecord
end
def join_table_name(table_1, table_2)
- [table_1, table_2].sort.join("_").to_sym
+ [table_1, table_2].sort.join("_")
end
end
end
diff --git a/activerecord/lib/rails/generators/active_record/migration/migration_generator.rb b/activerecord/lib/rails/generators/active_record/migration/migration_generator.rb
index c1f9d8962b..f6a432c6e5 100644
--- a/activerecord/lib/rails/generators/active_record/migration/migration_generator.rb
+++ b/activerecord/lib/rails/generators/active_record/migration/migration_generator.rb
@@ -21,7 +21,7 @@ module ActiveRecord
when /join_table/
if attributes.length == 2
@migration_action = 'join'
- @join_tables = attributes.map(&:name)
+ @join_tables = attributes.map(&:plural_name)
set_index_names
end
@@ -30,9 +30,17 @@ module ActiveRecord
def set_index_names
attributes.each_with_index do |attr, i|
- attr.index_name = [attr, attributes[i - 1]].map{ |a| :"#{a.name.singularize}_id"}
+ attr.index_name = [attr, attributes[i - 1]].map{ |a| index_name_for(a) }
end
end
+
+ def index_name_for(attribute)
+ if attribute.foreign_key?
+ attribute.name
+ else
+ attribute.name.singularize.foreign_key
+ end.to_sym
+ end
end
end
end