如何使用 ActiveRecord::Base.connection.exec_query 获取输入结果

chb*_*bla 3 postgresql activerecord ruby-on-rails

我正在执行一个查询,ActiveRecord::Base.connection.exec_query()但继续将整数作为字符串获取,如下所示:

ActiveRecord::Base.connection.exec_query(query)

#<ActiveRecord::Result:0x0000000674e248
 @column_types=
  {"date"=>#<ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Date:0x000000067a4c60 @limit=nil, @precision=nil, @scale=nil>,
   "property_id"=>#<ActiveRecord::Type::String:0x0000000b316090 @limit=nil, @precision=nil, @scale=nil>,
   "property_name"=>#<ActiveRecord::Type::String:0x0000000b316090 @limit=nil, @precision=nil, @scale=nil>,
   "subgroup_name"=>#<ActiveRecord::Type::String:0x0000000b316090 @limit=nil, @precision=nil, @scale=nil>,
   "channel_id"=>#<ActiveRecord::Type::String:0x0000000b316090 @limit=nil, @precision=nil, @scale=nil>,
   "eligible_impressions"=>#<ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer:0x0000000b316bf8 @limit=nil, @precision=nil, @range=-2147483648...2147483648, @scale=nil>,
   "estimated_impressions"=>#<ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer:0x0000000b316bf8 @limit=nil, @precision=nil, @range=-2147483648...2147483648, @scale=nil>,
   "impressions"=>#<ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer:0x0000000b316bf8 @limit=nil, @precision=nil, @range=-2147483648...2147483648, @scale=nil>,
   "estimated_clicks"=>#<ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer:0x0000000b316bf8 @limit=nil, @precision=nil, @range=-2147483648...2147483648, @scale=nil>,
   "imported_clicks"=>#<ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer:0x0000000b316bf8 @limit=nil, @precision=nil, @range=-2147483648...2147483648, @scale=nil>,
   "estimated_costs_eur"=>#<ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Decimal:0x00000017052ff0 @limit=nil, @precision=nil, @scale=nil>,
   "imported_costs_eur"=>#<ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Decimal:0x00000017052ff0 @limit=nil, @precision=nil, @scale=nil>,
   "booking_count"=>#<ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Integer:0x0000000b316bf8 @limit=nil, @precision=nil, @range=-2147483648...2147483648, @scale=nil>,
   "booking_revenue_eur"=>#<ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Decimal:0x0000000b316658 @limit=nil, @precision=nil, @scale=nil>},
 @columns=
  ["date",
   "property_id",
   "property_name",
   "subgroup_name",
   "channel_id",
   "eligible_impressions",
   "estimated_impressions",
   "impressions",
   "estimated_clicks",
   "imported_clicks",
   "estimated_costs_eur",
   "imported_costs_eur",
   "booking_count",
   "booking_revenue_eur"],
 @hash_rows=nil,
 @rows=[["2017-11-13", "CHILD", "childname", "unitname", "Google", nil, nil, "300", "0", nil, "0.00000", nil, "0", "0.00"]]>
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何获得正确的类型,因为此信息已包含在结果对象中?

数据库是 Postgres - 我记得我用 mysql 没有这个问题。Rails 仍然是 4.2.4

Bal*_*ato 5

在 Rails 4.2 上,您可以cast_valuesActiveRecord::Result 使用

ActiveRecord::Base.connection.exec_query(query).cast_values
Run Code Online (Sandbox Code Playgroud)

Rails 5 将返回文档中突出显示的强制转换值:

# Get the record values of the result:
result.rows
# => [[1, "title_1", "body_1"],
      [2, "title_2", "body_2"],
      ...
     ]
Run Code Online (Sandbox Code Playgroud)