提交 3802de4a 编写于 作者: R Rafael Mendonça França

Merge branch 'derekprior-dp-add-foreign-keys-with-generators'

Closes #17759
......@@ -14,6 +14,9 @@ def change
end
<% attributes_with_index.each do |attribute| -%>
add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>
<% end -%>
<% attributes.select(&:reference?).reject(&:polymorphic?).each do |attribute| -%>
add_foreign_key :<%= table_name %>, :<%= attribute.name.pluralize %>
<% end -%>
end
end
......@@ -4,6 +4,9 @@ def change
<% attributes.each do |attribute| -%>
<%- if attribute.reference? -%>
add_reference :<%= table_name %>, :<%= attribute.name %><%= attribute.inject_options %>
<%- unless attribute.polymorphic? -%>
add_foreign_key :<%= table_name %>, :<%= attribute.name.pluralize %>
<%- end -%>
<%- else -%>
add_column :<%= table_name %>, :<%= attribute.name %>, :<%= attribute.type %><%= attribute.inject_options %>
<%- if attribute.has_index? -%>
......@@ -26,6 +29,9 @@ def change
<%- if migration_action -%>
<%- if attribute.reference? -%>
remove_reference :<%= table_name %>, :<%= attribute.name %><%= attribute.inject_options %>
<%- unless attribute.polymorphic? -%>
remove_foreign_key :<%= table_name %>, :<%= attribute.name.pluralize %>
<%- end -%>
<%- else -%>
<%- if attribute.has_index? -%>
remove_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>
......
* Generated migrations add the appropriate foreign key constraints to
references.
*Derek Prior*
* Deprecate different default for `log_level` in production.
*Godfrey Chan*, *Matthew Draper*
......
......@@ -85,6 +85,18 @@ def test_remove_migration_with_references_options
end
end
def test_remove_migration_with_references_removes_foreign_keys
migration = "remove_references_from_books"
run_generator [migration, "author:belongs_to", "distributor:references{polymorphic}"]
assert_migration "db/migrate/#{migration}.rb" do |content|
assert_method :change, content do |change|
assert_match(/remove_foreign_key :books, :authors/, change)
assert_no_match(/remove_foreign_key :books, :distributors/, change)
end
end
end
def test_add_migration_with_attributes_and_indices
migration = "add_title_with_index_and_body_to_posts"
run_generator [migration, "title:string:index", "body:text", "user_id:integer:uniq"]
......@@ -171,6 +183,18 @@ def test_add_migration_with_required_references
end
end
def test_add_migration_with_references_adds_foreign_keys
migration = "add_references_to_books"
run_generator [migration, "author:belongs_to", "distributor:references{polymorphic}"]
assert_migration "db/migrate/#{migration}.rb" do |content|
assert_method :change, content do |change|
assert_match(/add_foreign_key :books, :authors/, change)
assert_no_match(/add_foreign_key :books, :distributors/, change)
end
end
end
def test_create_join_table_migration
migration = "add_media_join_table"
run_generator [migration, "artist_id", "musics:uniq"]
......@@ -205,7 +229,7 @@ def test_should_create_empty_migrations_if_name_not_start_with_add_or_remove_or_
end
end
end
def test_properly_identifies_usage_file
assert generator_class.send(:usage_path)
end
......
......@@ -407,6 +407,27 @@ def test_required_adds_null_false_to_column
end
end
def test_foreign_key_is_added_for_references
run_generator ["account", "supplier:belongs_to", "user:references"]
assert_migration "db/migrate/create_accounts.rb" do |m|
assert_method :change, m do |up|
assert_match(/add_foreign_key :accounts, :suppliers/, up)
assert_match(/add_foreign_key :accounts, :users/, up)
end
end
end
def test_foreign_key_is_skipped_for_polymorphic_references
run_generator ["account", "supplier:belongs_to{polymorphic}"]
assert_migration "db/migrate/create_accounts.rb" do |m|
assert_method :change, m do |up|
assert_no_match(/add_foreign_key :accounts, :suppliers/, up)
end
end
end
private
def assert_generated_fixture(path, parsed_contents)
fixture_file = File.new File.expand_path(path, destination_root)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册