From ede2343031981e347605d55200e56829c3eb1b20 Mon Sep 17 00:00:00 2001 From: Yves Senn Date: Wed, 13 Jan 2016 10:11:54 +0100 Subject: [PATCH] fix regression when loading fixture files with symbol keys. Closes #22584. --- activerecord/CHANGELOG.md | 6 ++++++ .../connection_adapters/abstract/database_statements.rb | 5 +++-- activerecord/test/cases/fixtures_test.rb | 4 ++++ activerecord/test/fixtures/naked/yml/trees.yml | 3 +++ 4 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 activerecord/test/fixtures/naked/yml/trees.yml diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 3de98c1f81..6a42a0f395 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,9 @@ +* Fix regression when loading fixture files with symbol keys. + + Closes #22584. + + *Yves Senn* + * Support `:if` and `:unless` options in `has_secure_token` *Griffin Smith* diff --git a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb index 0ac5e80119..c4f525336b 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb @@ -297,14 +297,15 @@ def reset_sequence!(table, column, sequence = nil) # Inserts the given fixture into the table. Overridden in adapters that require # something beyond a simple insert (eg. Oracle). def insert_fixture(fixture, table_name) - columns = schema_cache.columns_hash(table_name) + fixture = fixture.stringify_keys + columns = schema_cache.columns_hash(table_name) binds = fixture.map do |name, value| if column = columns[name] type = lookup_cast_type_from_column(column) Relation::QueryAttribute.new(name, value, type) else - raise Fixture::FixtureError, %(table "#{table_name}" has no column named "#{name}".) + raise Fixture::FixtureError, %(table "#{table_name}" has no column named #{name.inspect}.) end end key_list = fixture.keys.map { |name| quote_column_name(name) } diff --git a/activerecord/test/cases/fixtures_test.rb b/activerecord/test/cases/fixtures_test.rb index c73958900b..da934ab8fe 100644 --- a/activerecord/test/cases/fixtures_test.rb +++ b/activerecord/test/cases/fixtures_test.rb @@ -223,6 +223,10 @@ def test_yaml_file_with_invalid_column assert_equal(%(table "parrots" has no column named "arrr".), e.message) end + def test_yaml_file_with_symbol_columns + ActiveRecord::FixtureSet.create_fixtures(FIXTURES_ROOT + "/naked/yml", "trees") + end + def test_omap_fixtures assert_nothing_raised do fixtures = ActiveRecord::FixtureSet.new(Account.connection, 'categories', Category, FIXTURES_ROOT + "/categories_ordered") diff --git a/activerecord/test/fixtures/naked/yml/trees.yml b/activerecord/test/fixtures/naked/yml/trees.yml new file mode 100644 index 0000000000..d163b98f21 --- /dev/null +++ b/activerecord/test/fixtures/naked/yml/trees.yml @@ -0,0 +1,3 @@ +root: + :id: 1 + :name: The Root -- GitLab