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

Trầ*_* Dự 1 ruby database postgresql ruby-on-rails

我在 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
Run Code Online (Sandbox Code Playgroud)

此代码第一次成功运行。但是第二次,它会抛出异常。(我正在使用 PostgresSQL)

PG::ConnectionBad(连接已关闭)

如果我删除 line connection.close。我会遇到另一个例外:

PG::DuplicatePstatement(错误:准备好的语句“order_statistic”已经存在

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

谢谢

Hie*_*ham 5

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

ActiveRecord::Base.connection.execute(%{YOUR QUERY HERE})
Run Code Online (Sandbox Code Playgroud)

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

ActiveRecord::Base.connection.reconnect!
Run Code Online (Sandbox Code Playgroud)

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