我重构它使用多个数据库具有相同的结构,每一个语言的遗留PHP应用程序的某些功能。当用户登录选择自己的语言,则以下所有的连接与DB取得该应用与一些像这样的代码:不同的数据库连接PARAMS
$db_name = 'db_appname_' . $_SESSION['language'];
mysql_connect(...);
mysql_select_db($db_name);
我想也重构了数据库,但目前它不是一个选项因为在开发新应用程序的同时,其他软件应保留在旧结构的生产中,并且在开发新应用程序一段时间之后。
我看到this question,但两者的问题和建议的宝石是很老的,似乎他们没有使用Rails工作3
这是实现这一行为在我的新的Rails 3应用程序的最佳方法?有没有其他选择可以避免我改变数据库结构并满足我的需求?
一个细节:在PHP应用程序甚至登录信息被保存在单独的表,即每块都有自己的用户表,当它在用户登录也通过在登录表单的语言PARAM。我想用设计为在新的应用程序,它可能不会使用这种方法工作的权威性,所以我想复制(我知道,这是不是DRY)登录在一个单独的用户模型信息与语言属性并在语言之间共享一个单独的数据库,以使用设计功能与我的应用程序。这会造成任何问题吗?
编辑:
为了完整起见,我用这个阳明配置文件
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
我见[这里](http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-establish_connection),这种方法需要一个散列作为数据库=>“db_appname _#{会议[:语言]}”的说法,所以我应该在database.yml中或给一个连接的名称?感谢提示,我会试验它。 – Fabio 2011-04-07 18:02:11
是的,你是对的。您应该将所有连接存储在'database.yml'文件中。这就是Rails的做法 – fl00r 2011-04-07 18:04:40
感谢您的答案,它的工作原理... – Fabio 2011-04-07 22:49:21