In Sequel, I can do:
irb(main):003:0> DB["select false"].get => false
Which returns a false boolean. I'd like to be able to do something similar in ActiveRecord:
irb(main):007:0> ActiveRecord::Base.connection.select_value "select false" => "f"
As you can see, it returns the string "f"
. Is there a way to get a false boolean with ActiveRecord? (Similarly, I might be calling a function that returns a timestamptz, an array, etc -- I'd want the returned value to have the correct type)
My use case: I'm calling a database function, want to get back a typed result instead of a string.
While I have no doubt that Björn Nilsson's answer worked when he posted it, it is failing for me with Postgres 9.4
and PG gem version 0.18.2
. I have found the following to work after looking through the PG gem documentation:
pg = ActiveRecord::Base.connection @type_map ||= PG::BasicTypeMapForResults.new(pg.raw_connection) res = pg.execute("SELECT 'abc'::TEXT AS a, 123::INTEGER AS b, 1.23::FLOAT;") res.type_map = @type_map res[0] # => {"a"=>"abc", "b"=>123, "float8"=>1.23}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With