Getting typed results from ActiveRecord raw SQL

后端 未结 6 2041
Happy的楠姐
Happy的楠姐 2020-12-29 20:51

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 so

6条回答
  •  北荒
    北荒 (楼主)
    2020-12-29 21:29

    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}
    

提交回复
热议问题