将pg::Result转换为活动记录模型 [英] Convert PG::Result to an Active Record model

查看:0
本文介绍了将pg::Result转换为活动记录模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

pg-ruby允许您一次向数据库发送多个查询,这有助于最大限度地减少对数据库的访问次数:

results = []
conn.send_query('QUERY1;QUERY2;QUERY3')
conn.block
while result = conn.get_result
  results << result
end
对于我已经知道的任何result活动记录模型,将结果转换为模型的适当方式是什么?目前我正在执行以下操作:

fields = result.fields
models = result.values.map { |value_set| 
  Model.new(Hash[fields.zip(value_set)])
}

该方法的问题在于,每个活动记录对象似乎都不是#persisted?,因为它们是用.new实例化的。

推荐答案

我认为您需要的是ActiveRecord::Base.instantiate方法。它将正确处理new_record?/persisted?问题,并为单表继承找到正确的类。

例如:

fields = result.fields
models = result.values.map { |value_set| 
  Model.instantiate(Hash[fields.zip(value_set)])
}

这篇关于将pg::Result转换为活动记录模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆