Каков наилучший способ подключения к базе данных для каждого пользователя в Rails?
-
09-06-2019 - |
Вопрос
Каков наилучший способ подключения к базе данных для каждого пользователя в Rails
?
Я понимаю, что это плохая практика проектирования Rails, но мы постепенно заменяем существующее веб-приложение, которое использует одну базу данных для каждого пользователя.Полное перепроектирование/переписывание невозможно.
Решение
Поместите что-то подобное в свой контроллер приложения.Я использую поддомен плюс «_clientdb», чтобы выбрать имя базы данных.У меня все базы данных используют одно и то же имя пользователя и пароль, поэтому я могу получить их из файла конфигурации БД.
Надеюсь это поможет!
class ApplicationController < ActionController::Base
before_filter :hijack_db
def hijack_db
db_name = request.subdomains.first + "_clientdb"
# lets manually connect to the proper db
ActiveRecord::Base.establish_connection(
:adapter => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['adapter'],
:host => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['host'],
:username => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['username'],
:password => ActiveRecord::Base.configurations[ENV["RAILS_ENV"]]['password'],
:database => db_name
)
end
end
Другие советы
Взгляни на ActiveRecord::Base.install_connection.Вот как вы подключаетесь к другому серверу базы данных.Я не могу больше помочь, так как не знаю, как вы узнаете пользователя или сопоставляете его с его базой данных, но я полагаю, что эта информация будет храниться в главной базе данных (а информация о соединении должна находиться в файле data.yml). ).
Удачи.