mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
fixtures will return a list of tables that may be effected, delete existing fixtures will delete those tables
This commit is contained in:
parent
6f4e3ffd0f
commit
2487aab99a
2 changed files with 30 additions and 6 deletions
|
@ -590,8 +590,31 @@ class Fixtures
|
|||
fixtures.size
|
||||
end
|
||||
|
||||
def delete_existing_fixtures(table = table_name)
|
||||
@connection.delete "DELETE FROM #{@connection.quote_table_name(table)}", 'Fixture Delete'
|
||||
def delete_existing_fixtures
|
||||
tables.each do |table|
|
||||
@connection.delete "DELETE FROM #{@connection.quote_table_name(table)}", 'Fixture Delete'
|
||||
end
|
||||
end
|
||||
|
||||
# Return a list of tables this fixture effect. This is typically the +table_name+
|
||||
# along with any habtm tables specified via Foxy Fixtures.
|
||||
def tables
|
||||
[table_name] + fixtures.values.map { |fixture|
|
||||
row = fixture.to_hash
|
||||
|
||||
# If STI is used, find the correct subclass for association reflection
|
||||
associations = []
|
||||
if model_class && model_class < ActiveRecord::Base
|
||||
reflection_class = row[inheritance_column_name].constantize rescue model_class
|
||||
associations = reflection_class.reflect_on_all_associations
|
||||
end
|
||||
|
||||
foxy_habtms = associations.find_all { |assoc|
|
||||
assoc.macro == :has_and_belongs_to_many && row.key?(assoc.name.to_s)
|
||||
}
|
||||
|
||||
foxy_habtms.map { |assoc| assoc.options[:join_table] }
|
||||
}.flatten.uniq
|
||||
end
|
||||
|
||||
def insert_fixtures
|
||||
|
@ -667,10 +690,6 @@ class Fixtures
|
|||
@connection.insert_fixture(row, table_name)
|
||||
end
|
||||
|
||||
habtm_fixtures.keys.each do |table|
|
||||
delete_existing_fixtures(table)
|
||||
end
|
||||
|
||||
# insert any HABTM join tables we discovered
|
||||
habtm_fixtures.each do |table, fixtures|
|
||||
fixtures.each do |row|
|
||||
|
|
|
@ -188,6 +188,11 @@ class FixturesTest < ActiveRecord::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_tables
|
||||
fixtures = Fixtures.new(Parrot.connection, 'parrots', 'Parrot', FIXTURES_ROOT + "/parrots")
|
||||
assert_equal %w{parrots parrots_treasures}, fixtures.tables
|
||||
end
|
||||
|
||||
def test_yml_file_in_subdirectory
|
||||
assert_equal(categories(:sub_special_1).name, "A special category in a subdir file")
|
||||
assert_equal(categories(:sub_special_1).class, SpecialCategory)
|
||||
|
|
Loading…
Reference in a new issue