我重構它使用多個數據庫具有相同的結構,每一個語言的遺留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