aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Magusev <lexmag@gmail.com>2012-07-19 00:24:21 +0400
committerAleksey Magusev <lexmag@gmail.com>2012-07-19 00:24:21 +0400
commit5a7d31913bb16977ec85d55de34ac0d79b512d62 (patch)
treefe178a7dc9532832a8ec8ea992f28a29cae61320
parentfe5b943d9fd389f313dd87bf73b7c11b8746227b (diff)
downloadrails-5a7d31913bb16977ec85d55de34ac0d79b512d62.tar.gz
rails-5a7d31913bb16977ec85d55de34ac0d79b512d62.tar.bz2
rails-5a7d31913bb16977ec85d55de34ac0d79b512d62.zip
Add fkey attributes to `join_table` migration generator
-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
-rw-r--r--railties/lib/rails/generators/generated_attribute.rb10
-rw-r--r--railties/test/generators/migration_generator_test.rb2
5 files changed, 24 insertions, 8 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
diff --git a/railties/lib/rails/generators/generated_attribute.rb b/railties/lib/rails/generators/generated_attribute.rb
index 35cd40d25e..d2c2abf40c 100644
--- a/railties/lib/rails/generators/generated_attribute.rb
+++ b/railties/lib/rails/generators/generated_attribute.rb
@@ -90,8 +90,12 @@ module Rails
end
end
+ def plural_name
+ name.sub(/_id$/, '').pluralize
+ end
+
def human_name
- name.to_s.humanize
+ name.humanize
end
def index_name
@@ -102,6 +106,10 @@ module Rails
end
end
+ def foreign_key?
+ !!(name =~ /_id$/)
+ end
+
def reference?
self.class.reference?(type)
end
diff --git a/railties/test/generators/migration_generator_test.rb b/railties/test/generators/migration_generator_test.rb
index 9f9cd9c9fc..774038c0e1 100644
--- a/railties/test/generators/migration_generator_test.rb
+++ b/railties/test/generators/migration_generator_test.rb
@@ -169,7 +169,7 @@ class MigrationGeneratorTest < Rails::Generators::TestCase
def test_create_join_table_migration
migration = "add_media_join_table"
- run_generator [migration, "artists", "musics:uniq"]
+ run_generator [migration, "artist_id", "musics:uniq"]
assert_migration "db/migrate/#{migration}.rb" do |content|
assert_method :change, content do |up|