diff options
author | Yves Senn <yves.senn@gmail.com> | 2014-06-10 13:28:38 +0200 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2014-06-26 22:03:48 +0200 |
commit | 69c711f38cac85e9c8bdbe286591bf88ef720bfa (patch) | |
tree | 8d9b10a585c7ba3d2c0c5fa73e38167f388b20e8 /activerecord/lib | |
parent | a48b675d54101b048228d1011ffa426c2b7fe94d (diff) | |
download | rails-69c711f38cac85e9c8bdbe286591bf88ef720bfa.tar.gz rails-69c711f38cac85e9c8bdbe286591bf88ef720bfa.tar.bz2 rails-69c711f38cac85e9c8bdbe286591bf88ef720bfa.zip |
fk: dump foreign keys to schema.rb
respect `table_name_prefix` and `table_name_suffix`.
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/migration.rb | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/schema_dumper.rb | 22 |
2 files changed, 25 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/migration.rb b/activerecord/lib/active_record/migration.rb index 01c001e692..12eaf36156 100644 --- a/activerecord/lib/active_record/migration.rb +++ b/activerecord/lib/active_record/migration.rb @@ -645,7 +645,9 @@ module ActiveRecord unless @connection.respond_to? :revert unless arguments.empty? || [:execute, :enable_extension, :disable_extension].include?(method) arguments[0] = proper_table_name(arguments.first, table_name_options) - arguments[1] = proper_table_name(arguments.second, table_name_options) if method == :rename_table + if [:rename_table, :add_foreign_key].include?(method) + arguments[1] = proper_table_name(arguments.second, table_name_options) + end end end return super unless connection.respond_to?(method) diff --git a/activerecord/lib/active_record/schema_dumper.rb b/activerecord/lib/active_record/schema_dumper.rb index e055d571ab..3db36458db 100644 --- a/activerecord/lib/active_record/schema_dumper.rb +++ b/activerecord/lib/active_record/schema_dumper.rb @@ -171,6 +171,8 @@ HEADER indexes(table, tbl) + foreign_keys(table, tbl) + tbl.rewind stream.print tbl.read rescue => e @@ -212,6 +214,26 @@ HEADER end end + def foreign_keys(table, stream) + return unless @connection.supports_foreign_keys? + + if (foreign_keys = @connection.foreign_keys(table)).any? + add_foreign_key_statements = foreign_keys.map do |foreign_key| + parts = [ + 'add_foreign_key ' + remove_prefix_and_suffix(foreign_key.from_table).inspect, + remove_prefix_and_suffix(foreign_key.to_table).inspect, + 'column: ' + foreign_key.column.inspect, + 'primary_key: ' + foreign_key.primary_key.inspect, + 'name: ' + foreign_key.name.inspect + ] + ' ' + parts.join(', ') + end + + stream.puts add_foreign_key_statements.sort.join("\n") + stream.puts + end + end + def remove_prefix_and_suffix(table) table.gsub(/^(#{@options[:table_name_prefix]})(.+)(#{@options[:table_name_suffix]})$/, "\\2") end |