diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2011-12-20 11:18:36 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2011-12-20 14:04:50 -0600 |
commit | 96838b5192e46caecc73cf45968fd27b78a41404 (patch) | |
tree | 7314876d8b11f739809114be0d961e03b50c9da0 | |
parent | 135b3a0dde2edd013b666ab54d35b8b99220f0aa (diff) | |
download | rails-96838b5192e46caecc73cf45968fd27b78a41404.tar.gz rails-96838b5192e46caecc73cf45968fd27b78a41404.tar.bz2 rails-96838b5192e46caecc73cf45968fd27b78a41404.zip |
can create hstore records via AR API
-rw-r--r-- | activerecord/CHANGELOG.md | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb | 14 | ||||
-rw-r--r-- | activerecord/test/cases/adapters/postgresql/hstore_test.rb | 7 |
3 files changed, 18 insertions, 5 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 6ea8ce129a..ee2811c2be 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,7 @@ ## Rails 4.0.0 (unreleased) ## +* PostgreSQL hstore records can be created. + * PostgreSQL hstore types are automatically deserialized from the database. ## Rails 3.2.0 (unreleased) ## diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index c26b61443b..6e169ae5c5 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -50,11 +50,15 @@ module ActiveRecord end end - def cast_hstore(string) - kvs = string.split(', ').map { |kv| - kv.split('=>').map { |k| k[1...-1] } - } - Hash[kvs] + def cast_hstore(object) + if Hash === object + object.map { |k,v| "#{k}=>#{v}" }.join ', ' + else + kvs = object.split(', ').map { |kv| + kv.split('=>').map { |k| k[1...-1] } + } + Hash[kvs] + end end end # :startdoc: diff --git a/activerecord/test/cases/adapters/postgresql/hstore_test.rb b/activerecord/test/cases/adapters/postgresql/hstore_test.rb index 5031486f29..7267536142 100644 --- a/activerecord/test/cases/adapters/postgresql/hstore_test.rb +++ b/activerecord/test/cases/adapters/postgresql/hstore_test.rb @@ -43,4 +43,11 @@ class PostgresqlHstoreTest < ActiveRecord::TestCase x = Hstore.find :first assert_equal({'1' => '2', '2' => '3'}, x.tags) end + + def test_create + hash = { 'a' => 'b', '1' => '2' } + x = Hstore.create!(:tags => hash) + x.reload + assert_equal hash, x.tags + end end |