Rails:PG :: ConnectionBad(连接已关闭)

时间:2016-07-26 15:35:04

标签: ruby-on-rails ruby database postgresql

我在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”   已存在

请帮我正确使用原始查询。

感谢

1 个答案:

答案 0 :(得分:3)

要进行原始查询,您可以按照以下步骤操作:

ActiveRecord::Base.connection.execute(%{YOUR QUERY HERE})

您的代码中的原因是您已经关闭了与数据库的连接,因此您无法进一步查询,重新连接数据库,您可以调用reconnect!,如:

ActiveRecord::Base.connection.reconnect!

但是我不建议你这样做,rails已经帮你处理了,不要自己动手,让我用我的第一个建议完成所有原始查询!