ruby-on-rails - 基于用户参数的 Rails 中的不同数据库连接

标签 ruby-on-rails database activerecord

我正在重构一个遗留 php 应用程序的一些功能,该应用程序使用具有相同结构的多个数据库,每种语言一个。当用户登录时选择他的语言,然后使用如下代码与该应用程序的数据库建立以下所有连接:

$db_name = 'db_appname_' . $_SESSION['language'];
mysql_connect(...);
mysql_select_db($db_name);

我也想重构数据库,但目前这不是一个选项,因为在开发新应用程序时以及在开发新应用程序后的一段时间内,其他软件应该使用旧结构保留在生产环境中。

我看到了this question ,但是问题和建议的 gem 都很旧,而且它们似乎不适用于 Rails 3。

在我的新 Rails 3 应用程序中实现此行为的最佳方法是什么?还有其他选择可以避免我更改数据库结构并满足我的需要吗?

最后一个细节:在 php 应用程序中,甚至登录信息都保存在单独的表中,即每个数据库都有自己的用户表,当用户登录时,它还会在登录表单中传递一个语言参数。我想在新应用程序中使用 devise for auth,这可能不适用于这种方法,所以我想在一个单独的用户模型中复制(我知道,这不是 DRY)登录信息具有语言属性和一个在语言之间共享的单独的数据库,以便在我的应用程序中使用设计功能。这会导致任何问题吗?

编辑:

为了完整性,我以这个 yml 配置文件结尾

production: &production
  adapter: mysql
  host: localhost
  username: user
  password: secret
  timeout: 5000

production_italian:
  <<: *production
  database: db_app_ita

production_english:
  <<: *production
  database: db_app_eng

并在基本模型中使用此配置(实际上不完全是这样,但这是为了让事情更清楚)

MyModel < AR::Base
  establish_connection "production_#{session[:language]}"
  ...
end

最佳答案

在您的模型中使用establish_connection:

MyModel < AR::Base
  establish_connection "db_appname_#{session[:language]}"
  ...
end

关于ruby-on-rails - 基于用户参数的 Rails 中的不同数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5580121/

相关文章:

java - 有没有一种方法可以测量执行 SQL 查询所花费的时间而不用 Java 获取结果?

php - Codeigniter 不稳定的 Active Record 结果

ruby-on-rails - Rails ActiveModel 序列化程序 : Retrieving Deeply Nested ActiveRecord Association

ruby - ActiveRecord - 从数据库中获取第 5-10 条记录

javascript - 根据 AJAX 请求替换整个页面标记

database - 填充报告/数据仓库数据库的策略

ruby-on-rails - 当关联对象有更多条件时如何预加载?

database - 为 Couch Base Server 1.8 和 2.0 构建 Erlang 客户端

ruby-on-rails - ruby gem devise 无法生成初始化程序

ruby-on-rails - 如何在 haml 的 link_to 标签中设置 ID?