【问题标题】:Rails - ActiveRecord get database name from an InstanceRails - ActiveRecord 从实例获取数据库名称
【发布时间】:2014-09-09 19:03:31
【问题描述】:

我有一个分布在许多数据库中的模型。这是一个例子:

class Timetablerange < ActiveRecord::Base
  self.table_name = "TimetableRange"

  def self.integration(integration)
    self.establish_connection(integration.to_sym)
    return self
  end

end

所以当我想从一个数据库中获取一个实例时:

Timetablerange.integration(:integration_id).find(1)

我需要从实例中获取 database_name 而不使用:

Timetable.connection.current_database

因为如果我使用它可能会有所不同:

instance_a = Timetablerange.integration(:integration_1).find(1)
instance_b = Timetablerange.integration(:integration_2).find(1)

此时 Timetable.connection.current_database = :integration_2 但 instance_a 是从 :integration_1 加载的。

我试过用:

instance_a.connection_handler.connection_pools

它列出了所有的连接。但是我现在怎么能从 instance_a 加载数据库呢?

非常感谢您的帮助!

【问题讨论】:

  • AFAIK 实例不知道它们是从哪个连接中检索到的
  • 如果你是对的,那么当我在实例中调用 .save 时,ActiveRecord 可以更新任意数据库中的值吗?这听起来很冒险!
  • 我相信是的——如果你经常切换数据库连接,那将是一个危险
  • 好的!那就太感谢了!我可能会为每个实例添加一些构造函数以将连接保存在 attr_accessor 中。最好的问候!

标签: ruby-on-rails database activerecord


【解决方案1】:

如果您使用的是 mysql,您可能可以使用:

Timetable.connection.execute("select database()").first.first

其他数据库也可能有查询来获取当前数据库。

【讨论】:

    猜你喜欢
    • 2011-01-14
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 2012-12-27
    • 2014-03-29
    • 2018-06-24
    • 1970-01-01
    相关资源
    最近更新 更多