在Rails中运行多个SQL查询而不关闭ActiveRecord.connection

时间:2015-04-13 15:32:40

标签: sql ruby-on-rails activerecord database-connection

所以我有一个名为DbsfnpService的rails模块。

在此范围内,我有一个班级

class DbnsfpAccess < ActiveRecord::Base
  establish_connection :dbnsfp
end

然后我在DbsfnpService内有许多与此类似的方法。

def get_tables
  sql = "select * from dbnsfp limit 1"
  results = DbnsfpAccess.connection.execute(sql)
  return results
end

当我通过包含DbsnfpService从另一个类调用这些方法时,我想只建立一个到:dbnsfp的连接并处理我的所有查询然后关闭该连接。我相信它现在如何,我调用的每个包含DbsnfpAccess.connection.execute(sql)的方法都是单独连接(?)。实现这一目标的最佳方法是什么?将连接对象传入这些函数?提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您希望在不知道表名的情况下对数据库执行调用,因此无法提前创建rails ActiveRecord表模型。

您可以使用sql而不是执行ActiveRecord::Base.connection.tables (见此链接How to list of all the tables defined for the database when using active record?

要使用这些表名,您需要将DbnsfpAccess转换为抽象类。

class DbnsfpAccess < ActiveRecord::Base
  self.abstract_class = true
  establish_connection :dbnsfp
end

然后您可以像这样创建要连接到DbnsfpAccess的模型:

class DynamicallyGenratedDbnsfpModel << DbnsfpAccess