我在Rails中使用本机查询(因为我的查询很复杂,我认为它不能在ActiveRecord
中表达)。所以这是我尝试的方式:
get do
connection = ActiveRecord::Base.connection.raw_connection
connection.prepare('order_statistic', @@sql)
data = connection.exec_prepared('order_statistic', [params[:id]])
connection.close()
data
end
此代码首次成功运行。但第二次,它将抛出异常。 (我正在使用PostgresSQL)
PG :: ConnectionBad(连接已关闭)
如果我删除行connection.close
。我会遇到另一个例外:
PG :: DuplicatePstatement(错误:准备好的声明“order_statistic” 已存在
请帮我正确使用原始查询。
感谢
答案 0 :(得分:3)
要进行原始查询,您可以按照以下步骤操作:
ActiveRecord::Base.connection.execute(%{YOUR QUERY HERE})
您的代码中的原因是您已经关闭了与数据库的连接,因此您无法进一步查询,重新连接数据库,您可以调用reconnect!
,如:
ActiveRecord::Base.connection.reconnect!
但是我不建议你这样做,rails已经帮你处理了,不要自己动手,让我用我的第一个建议完成所有原始查询!