根据会话信息在数据库之间切换

时间:2016-09-02 15:14:48

标签: ruby-on-rails ruby-on-rails-4

我有一组10个左右的视图,它们在三个数据库中是相同的。这些视图包含数据库'用户,对象等。我希望能够根据用户会话更改数据库连接。换句话说,用户登录,选择他们想要使用的三个数据库中的哪一个,并且视图的模型使用适当的连接。

我试图围绕如何最好地编码来解决这个问题。由于多个用户同时使用该应用程序,我相信我需要在我的模型中保持三个连接池(每个数据库一个)。我非常确定我有这个,我能解释的是,在每次查找之前我是如何强制模型使用特定连接的,以及如何传递信息来自会议。

对这种方法整体有何看法?有更好的东西吗?

2 个答案:

答案 0 :(得分:0)

您可能会在使用Thread.current和覆盖模型中的connection方法时获得一些好处。

当用户在会话中拥有目标数据库时,您可以在Thread.current中设置目标数据库:

before_filter :set_target_db

def set_target_db
  Thread.current[:target_database] = session[:the_db_they_chose]
end

然后在你的模特中:

def self.connection
  case Thread.current[:target_database]
    when :first_db
      # Return connection from first pool
    when :second_db
      # Return connection from second pool
  end
end

显然,您可以将所有模型共享该代码,这些模型将数据存储在您要切换的3个数据库中。

我不确定我是否完全提倡这种方法。听起来有点像你有三个独立的应用程序共享普通用户,从这个角度来看它可能会更好。很难说不知道应用程序有多少取决于这三个相同的数据库以及用户旁边包含多少数据库。

答案 1 :(得分:0)

这颗宝石是银弹:https://github.com/thiagopradi/octopus

我将数据库存储在会话中,并在每次搜索之前使用SELECT 'ADMISSION: ' AS CATEGORY_NAME ,AGE ,COUNT(ID) AS COUNTS FROM table GROUP BY AGE 方法。