diff options
author | Jon Moss <maclover7@users.noreply.github.com> | 2016-11-15 17:12:08 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-15 17:12:08 -0500 |
commit | bce3d1f8c01a125ef56d82967cb23daa258bb58d (patch) | |
tree | 501f733bbc3ad2929c308add2ccd17a19f3092c7 /activerecord | |
parent | 6e692e6e5bb90fbaf1524429139daa9bd1c4f990 (diff) | |
parent | 0a8b212db76441df29a572580f1dab596d28d73d (diff) | |
download | rails-bce3d1f8c01a125ef56d82967cb23daa258bb58d.tar.gz rails-bce3d1f8c01a125ef56d82967cb23daa258bb58d.tar.bz2 rails-bce3d1f8c01a125ef56d82967cb23daa258bb58d.zip |
Merge pull request #27058 from maclover7/jm-fix-26904
Support AC::Parameters for PG HStore
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 7 | ||||
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/postgresql/oid/hstore.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/adapters/postgresql/hstore_test.rb | 10 |
3 files changed, 19 insertions, 0 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 8efefe9b2e..7f4be54dbb 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,10 @@ +* Allow `ActionController::Parameters`-like objects to be passed as + values for Postgres HStore columns. + + Fixes #26904. + + *Jon Moss* + * Added `stat` method to `ActiveRecord::ConnectionAdapters::ConnectionPool` Example: diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/oid/hstore.rb b/activerecord/lib/active_record/connection_adapters/postgresql/oid/hstore.rb index a74a044a3a..d629ebca91 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql/oid/hstore.rb @@ -24,6 +24,8 @@ module ActiveRecord def serialize(value) if value.is_a?(::Hash) value.map { |k, v| "#{escape_hstore(k)}=>#{escape_hstore(v)}" }.join(", ") + elsif value.respond_to?(:to_unsafe_h) + serialize(value.to_unsafe_h) else value end diff --git a/activerecord/test/cases/adapters/postgresql/hstore_test.rb b/activerecord/test/cases/adapters/postgresql/hstore_test.rb index c9982d3705..1f35300739 100644 --- a/activerecord/test/cases/adapters/postgresql/hstore_test.rb +++ b/activerecord/test/cases/adapters/postgresql/hstore_test.rb @@ -10,6 +10,12 @@ if ActiveRecord::Base.connection.supports_extensions? store_accessor :settings, :language, :timezone end + class FakeParameters + def to_unsafe_h + { "hi" => "hi" } + end + end + def setup @connection = ActiveRecord::Base.connection @@ -321,6 +327,10 @@ if ActiveRecord::Base.connection.supports_extensions? assert_match %r[t\.hstore "tags",\s+default: {}], output end + def test_supports_to_unsafe_h_values + assert_equal("\"hi\"=>\"hi\"", @type.serialize(FakeParameters.new)) + end + private def assert_array_cycle(array) # test creation |